9.2.2 HTTPレスポンス圧縮フィルタを使用するための条件
ここでは,HTTPレスポンス圧縮フィルタを使用する場合の条件や注意事項について説明します。
(1) 前提条件
HTTPレスポンス圧縮機能を使用にするには,次の前提条件を満たしている必要があります。
-
Webクライアントのgzip形式の対応
HTTPレスポンス圧縮機能を有効にした場合,gzip形式で圧縮されたHTTPレスポンスをWebクライアントで解凍する必要があります。そのため,Webクライアントがgzip形式に対応していることが前提となります。Webクライアントがgzip形式に対応していない場合は,HTTPレスポンス圧縮機能を有効にしていても,HTTPレスポンスは圧縮されません。
-
WebクライアントのHTTP/1.1の対応
HTTPレスポンス圧縮機能では,Webクライアントがgzip形式に対応しているかどうかをHTTPリクエストのAccept-Encodingヘッダに指定された値によって判定しています。そのため,WebクライアントはAccept-Encodingヘッダの仕様が規定されているHTTP/1.1に対応している必要があります。
(2) 必要なメモリ量
HTTPレスポンス圧縮機能に必要なメモリ量は次の計算式で求められます。
HTTPレスポンス圧縮機能に必要なメモリ量(バイト)=HTTPレスポンス圧縮機能が有効となるHTTPリクエストの同時実行数×レスポンスの圧縮しきい値(バイト)
圧縮しきい値とは,HTTPレスポンスボディのサイズによって,HTTPレスポンスを圧縮するかどうかを判定するためのしきい値です。HTTPレスポンスボディのサイズが圧縮しきい値に定義したサイズを超える場合にだけ,HTTPレスポンスを圧縮します。なお,圧縮しきい値は,HTTPリクエストに対して設定します。
圧縮しきい値は,DD(web.xml)に定義します。圧縮しきい値を定義することで,HTTPレスポンスのサイズが小さい場合に,HTTPレスポンスの圧縮に掛かる時間が,通信に掛かる時間よりも大きくならないようにします。
圧縮しきい値は,圧縮するリソースの種別と通信回線の速度によって適切なサイズが決まります。圧縮しきい値に定義するサイズは実測で求め,適切なサイズを定義することを推奨します。
(3) HTTPレスポンス圧縮機能を有効にする場合の条件
HTTPレスポンス圧縮機能が有効になる条件を指定できます。指定できる条件を次に示します。
-
HTTPリクエストのURLパターン
HTTPレスポンス圧縮フィルタを実装しているWebアプリケーションに対するリクエストのURLが,指定したURLパターンと一致する場合,そのリクエストに対するレスポンスを圧縮します。
HTTPレスポンスの圧縮を実行するHTTPリクエストのURLパターンとして「*.html」を指定した場合の例を次の図に示します。
図9‒2 HTTPレスポンスの圧縮を実行するHTTPリクエストのURLパターンとして「*.html」を指定した場合の例 -
HTTPレスポンスのMedia-Type
HTTPレスポンスのContent-Typeヘッダに含まれるMedia-Typeの値が,指定した値と一致する場合,HTTPレスポンスを圧縮します。
HTTPレスポンスのMedia-Typeは,サーブレット/JSPの場合はJ2EEアプリケーションがsetContentTypeメソッドによって設定した値です。静的コンテンツの場合は拡張子に対応づけられたMIMEタイプとなります。
HTTPレスポンスの圧縮を実行するHTTPレスポンスのMedia-Typeとして「text/html」を指定した場合の例を次の図に示します。
図9‒3 HTTPレスポンスの圧縮を実行するHTTPレスポンスのMedia-Typeとして「text/html」を指定した場合の例 -
HTTPレスポンスのボディサイズ
HTTPレスポンスの圧縮を実行するためしきい値を設定して,ボディサイズがこのしきい値を超える場合,HTTPレスポンスを圧縮します。
HTTPレスポンスの圧縮を実行するHTTPレスポンスのボディサイズとして「200バイト」を指定してHTTPレスポンス圧縮機能を有効にした場合の例を次の図に示します。
図9‒4 HTTPレスポンスの圧縮を実行するHTTPレスポンスのボディサイズとして「200バイト」を指定した場合の例
(4) 注意事項
- HTTPレスポンス圧縮フィルタの定義に関する注意事項
-
HTTPレスポンス圧縮フィルタを使用する場合,built-inフィルタのHTTPリクエストおよびHTTPレスポンスへの作用やフィルタ連鎖の順序制約を考慮して,WebアプリケーションにHTTPレスポンス圧縮フィルタを組み込む必要があります。built-inフィルタの詳細については,「9.1.1 アプリケーションサーバが提供するサーブレットフィルタ(built-inフィルタ)」を参照してください。
なお,Servlet 3.0以降では,web.xmlではなくAPIでのフィルタ定義ができますが,built-inフィルタはAPIでのフィルタ定義はできません。
- エラーページに関する注意事項
-
HTTPレスポンス圧縮機能を使用するWebアプリケーションでは,次の機能を使用してエラーページをカスタマイズできます。
-
Webサーバの機能を使用したエラーページのカスタマイズ
-
インプロセスHTTPサーバによるエラーページのカスタマイズ
-
web.xmlの<error-page>タグを使用したエラーページのカスタマイズ
web.xmlの<error-page>タグを使用したエラーページを使用する場合は,エラーページに静的コンテンツ,またはレスポンスからjavax.servlet.ServletOutputStreamを取得して使用するサーブレットを指定してください。
HTTPレスポンス圧縮機能では圧縮後のデータの出力にレスポンスオブジェクトから取得したjavax.servlet.ServletOutputStreamを使用します。そのため,エラーページを生成するサーブレット,またはJSPでレスポンスオブジェクトからは,java.io.PrintWriterを取得できません。
-