2.16.5 HTTPアダプタを使用したCookie情報の引き継ぎ
HTTPアダプタでは,ビジネスプロセスから複数のサービスを呼び出す場合に,サービス呼び出し間のセッション維持(Cookie情報の引き継ぎ)ができます。
HTTPアダプタを利用したCookie情報の引き継ぎの概要を次の図に示します。
|
HTTPアダプタのCookie情報の引き継ぎについて,上図を例に説明します。なお,ここで説明する電文の例では,名前空間接頭辞を省略しています。
(1) Cookie情報の引き継ぎ方法
2つのサービス間でCookie情報を引き継ぐ場合,Cookie情報を一括して引き継ぐか,Cookie名ごとに個別に引き継ぐかを選択できます。どちらの方法を選択するかによって,使用するヘッダ変数用の電文フォーマットが異なります。
- Cookie情報を一括して引き継ぐ場合
-
-
要求電文フォーマットにadphttp_header_request1.xsdを使用します。
-
応答電文フォーマットにadphttp_header_response1.xsdを使用します。
-
- Cookie名ごとに編集できる状態で個別に引き継ぐ場合
-
-
要求電文フォーマットにadphttp_header_request2.xsdを使用します。
-
応答電文フォーマットにadphttp_header_response2.xsdを使用します。
-
どちらの場合も,サービス部品Aからサービス部品BにCookie情報を引き継ぐには,サービス部品Aの応答電文に含まれるCookie情報(Cookie要素)を,サービス部品Bの要求電文にマッピングしてHTTPアダプタを呼び出します。
それぞれの場合の引き継ぎ方法について説明します。
(a) Cookie情報を一括して引き継ぐ場合
電文フォーマットでは,次のようにCookie情報がすべてany型で表現されます。なお,Cookie要素を表す要素名は「Cookie_types」としています。
<xsd:complexType name="http-header-Cookies-type"> <xsd:sequence> <xsd:any namespace="##any" processContents="skip" minOccurs="0" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType>
any型の要素部分同士をサービス部品Aの応答電文からサービス部品Bの要求電文にマッピングすることで,Cookie情報を一括して引き継ぐことができます。
(b) Cookie名ごとに編集できる状態で個別に引き継ぐ場合
電文フォーマットでは,次のようにCookie情報の各属性がXML要素の属性に分割されます。なお,Cookie要素を表す要素名は「Cookie_types」としています。
<xsd:complexType name="cookie-type"> <xsd:simpleContent> <xsd:extension base="xsd:string"> <xsd:attribute name="name" type="xsd:string" use="required"></xsd:attribute> <xsd:attribute name="host" type="xsd:string" use="required"></xsd:attribute> <xsd:attribute name="path" type="xsd:string" use="optional"></xsd:attribute> </xsd:extension> </xsd:simpleContent> </xsd:complexType>
サービス部品Aの応答電文からサービス部品Bの要求電文へのマッピング時に,Cookie名などを参照して個別に引き継ぐことができます。
(2) HTTPレスポンス・HTTPリクエストの変換
HTTPレスポンスヘッダから応答電文への変換,および要求電文からHTTPリクエストヘッダへの変換処理について説明します。
- HTTPレスポンスヘッダから応答電文への変換処理
-
サービス部品AからHTTPレスポンスヘッダとして渡された各Set-Cookieヘッダの値は,応答電文のCookie要素に格納されます。また,Set-Cookieヘッダの各属性はCookie要素の属性値に設定されます。
複数のSet-Cookieヘッダが存在した場合は,それぞれのSet-CookieヘッダについてCookie要素が生成されます。
HTTPレスポンスヘッダから応答電文(ヘッダ)への変換例を次に示します。
-
HTTPレスポンスヘッダのSet-Cookieヘッダ
Set-Cookie: AAA=1234; expires=Sat, 27-Oct -2012 10:00:00 GMT; path=/ Set-Cookie: BBB=5678; expires=Sat, 27-Oct -2012 10:00:00 GMT;
-
生成後の応答電文(ヘッダ)
<Cookies> <Cookie name="AAA" path="/" host="hostname:80※">AAA=1234; expires=Sat, 27-Aug-2011 10:00:00 GMT; path=/</Cookie> <Cookie name="BBB" host="hostname:80※">BBB=5678; expires=Sat, 27-Aug-2011 10:00:00 GMT</Cookie> </Cookies>
- 注※
-
host属性には,サービス部品への接続に使用したホスト名とポート番号が格納されます。
Set-Cookieヘッダからpath属性を取得できなかった場合は,応答電文(ヘッダ)にpath属性を付加しないで処理されます。この場合,path属性値は"/"として扱われます。
-
- 要求電文からHTTPリクエストヘッダへの変換処理
-
HTTPアダプタの要求電文として渡されたCookie情報は,次の両方の条件を満たすものが送信対象としてHTTPリクエストヘッダに設定されます。
-
サービス部品のURIとCookie要素のhost属性に設定された値(ホスト名とポート番号)が完全一致する。
-
サービス部品のURIに対してCookie要素のpath属性に設定されたパスが前方一致する。
- 例:サービス部品のURIがhttp://localhost:80/abc/xyzの場合
-
-
Cookie情報のhost属性値=localhost:80, path属性値=/abc → 送信される
-
Cookie情報のhost属性値=somehost:80, path属性値=/abc → 送信されない
-
Cookie情報のhost属性値=localhost:443, path属性値=/abc → 送信されない
-
Cookie情報のhost属性値=localhost:80, path属性値=/xyz → 送信されない
-
Cookie情報のhost属性値=localhost:80, path属性値=/abc/xyz/def → 送信されない
-
Cookie情報が複数ある場合は,次のようにひとまとめのCookieヘッダに変換されます。
要求電文(ヘッダ)からHTTPリクエストヘッダへの変換例を次に示します。
-
要求電文(ヘッダ)のCookie要素
<Cookies> <Cookie name="AAA" path="/" host="hostname:80">AAA=1234; expires=Sat, 27-Oct-2012 10:00:00 GMT; path=/</Cookie> <Cookie name="BBB" host="hostname:80">BBB=5678; expires=Sat, 27-Oct-2012 10:00:00 GMT</Cookie> </Cookies>
Cookieの要素名はローカル名だけ使用します。ヘッダ応答電文からヘッダ要求電文にCookie情報を一括引継した場合,ヘッダ要求電文のCookie要素の名前空間はヘッダ応答電文になりますが,名前空間を参照しないため,送信対象として正しく扱われます。
-
生成後のHTTPリクエストヘッダ
Cookie: AAA=1234; BBB=5678
-
- 注意事項
-
-
異なるpath属性値を持つ複数のCookie要素を設定した場合,path属性値が詳細な順に,HTTPヘッダにCookie情報が設定されます。
(例)NAME1=VALUE1 path=/, NAME2=VALUE2 path=/xyzの値を持つCookie要素を設定した場合:
Cookie: NAME2=VALUE2; NAME1=VALUE1
-
正常に処理できないCookie情報を受信した場合は,解析をスキップし,処理を続行します。
-
このほかに「2.2.4(4) 注意事項」に示す注意事項も参照してください。
-