5.10.4 Webコンテナにゲートウェイ情報を通知する場合の注意事項
ゲートウェイ指定機能を使用する上での注意事項を次に示します。
- リダイレクト先URLのホスト名,およびポート番号の指定について
-
通常,ブラウザはHostヘッダを付けてリクエストを送信するため,リダイレクト先URLのホスト名やポート番号を指定する必要はありません。
なお,リクエストにHostヘッダがあるかどうかは,javax.servlet.http.HttpServletRequestクラスのgetHeaderメソッドに,引数「Host」を指定して呼び出すことで確認できます。
- サーブレットAPIの動作について
-
ゲートウェイ指定機能の利用によって,一部のサーブレットAPIの動作が変わります。WebアプリケーションでAPIを利用するときには注意が必要です。
ゲートウェイ指定機能を使用する場合,一部のサーブレットAPIの動作が変わります。ゲートウェイ指定機能使用時のサーブレットAPIの注意事項を,使用するメソッドごとに示します。
-
javax.servlet.http.HttpServletResponseクラスのsendRedirectメソッド
引数に相対URLを指定し,Hostヘッダのないリクエストの場合,リダイレクト先URLのホスト名とポート番号は,ゲートウェイ指定機能で指定した値となります。引数に相対URLを指定し,ゲートウェイ指定機能でスキームをhttpsと見なすように設定した場合,リダイレクト先URLのスキームは常に「https」となります。
-
javax.servlet.ServletRequestインタフェースのgetRequestURLメソッド
ゲートウェイ指定機能でスキームをhttpsと見なすように設定した場合,戻り値は常に「https://」で始まるURLとなります。
-
javax.servlet.ServletRequestインタフェースのgetServerNameメソッド
ゲートウェイ指定機能でリダイレクト先URLのホスト名を指定し,リクエストにHostヘッダがない場合,戻り値は指定した値となります。
-
javax.servlet.ServletRequestインタフェースのgetServerPortメソッド
ゲートウェイ指定機能でリダイレクト先URLのポート番号を指定し,リクエストにHostヘッダがない場合,戻り値は指定した値となります。ゲートウェイ指定機能でリダイレクト先URLのホスト名を指定し,ポート番号を省略した場合,戻り値はリクエストのスキームがhttpであれば「80」,httpsであれば「443」となります。
-
javax.servlet.ServletRequestインタフェースのgetSchemeメソッド
ゲートウェイ指定機能でスキームをhttpsと見なすように設定した場合,戻り値は常に「https」となります。
-
javax.servlet.ServletRequestインタフェースのisSecureメソッド
ゲートウェイ指定機能でスキームをhttpsと見なすように設定した場合,戻り値は常に「true」となります。
-
javax.servlet.ServletRequestインタフェースのgetAttributeメソッド
ゲートウェイ指定機能でスキームをhttpsと見なすように設定した場合でも,次の属性は取得できません。
・javax.servlet.request.cipher_suite(WebサーバにMicrosoft IISを使用している場合は,ゲートウェイ指定機能の使用に関係なく取得できません)
・javax.servlet.request.key_size
・javax.servlet.request.X509Certificate
-
- web.xmlの<transport-guarantee>タグについて
-
ゲートウェイ指定機能でスキームをHTTPSと見なすように設定した場合,WebサーバへのリクエストがHTTPであってもHTTPSであると見なされます。このため,web.xmlの<transport-guarantee>タグでINTEGRALやCONFIDENTIALを指定してもHTTPSのURLへリダイレクトされないので注意してください。
- CookieのSecure属性について
-
ゲートウェイ指定機能でスキームをHTTPSと見なすように設定している場合に,Webコンテナが生成したセッションIDを,Cookieによってクライアントに返すとき,そのCookieにはSecure属性が付与されます。
- ゲートウェイを通さないWebサーバへの通信
-
リダイレクタでゲートウェイ指定機能を有効にした場合,そのWebサーバにSSLアクセラレータや負荷分散機などのゲートウェイを通さないとき,直接HTTP通信はできません。