Hitachi

Cosminexus V11 アプリケーションサーバ 機能解説 互換編


9.2.3 HTTPレスポンス圧縮フィルタを使用するアプリケーションの実装

ここでは,HTTPレスポンス圧縮フィルタを使用するアプリケーションを開発するときの注意事項について説明します。

〈この項の構成〉

(1) ほかのフィルタと併用する場合の呼び出し順序

HTTPレスポンス圧縮フィルタは,HTTPレスポンスのヘッダに設定するほかのフィルタよりも前に呼び出される必要があります。javax.servlet.http.HttpServletResponseのsetHeaderメソッド,addHeaderメソッド,setIntHeaderメソッド,およびaddIntHeaderメソッドを使用して,Content-Lengthヘッダ,Content-Encodingヘッダを設定するほかのフィルタを使用する場合は,HTTPレスポンス圧縮フィルタよりも後ろに配置してください。

(2) HTTPレスポンスのバッファに関する注意事項

HTTPレスポンス圧縮機能を有効にした場合,HTTPレスポンスのバッファよりも前に圧縮しきい値に指定したサイズのバッファが設けられます。HTTPレスポンスのバッファには,出力したデータが圧縮しきい値を超えたときに書き込まれます。

圧縮後のデータサイズがHTTPレスポンスのバッファサイズを超えなければ,WebクライアントにHTTPレスポンスが書き出されることはありません。出力したデータのサイズが圧縮しきい値を超える前に,HTTPレスポンスをWebクライアントに書き出す必要がある場合は,明示的にレスポンス出力用ストリームのflushメソッドを呼び出す必要があります。ただし,出力したデータのサイズが圧縮しきい値を超える前にflushメソッド,またはjavax.servlet.ServletResponseクラスのflushBufferメソッドを呼び出した場合は,出力したデータは圧縮されないでWebクライアントに書き出されます。

注※

レスポンス出力用ストリームとは,次に示すオブジェクトを指します。

  • javax.servlet. ServletResponseクラスのgetOutputStreamメソッドによって取得したjavax.servlet.ServletOutputStream

  • javax.servlet. ServletResponseクラスのgetWriterメソッドによって取得したjava.io.PrintWriter

  • JSPで暗黙的に利用できるjavax.servlet.jsp.JspWriter

(3) HTTPレスポンスのレスポンスヘッダに関する注意事項

HTTPレスポンス圧縮機能によってHTTPレスポンスのレスポンスボディが圧縮される場合,このHTTPレスポンスのContent-Encodingヘッダにはgzip,VaryヘッダにはAccept-Encodingが指定されます。Content-Lengthヘッダには何も指定されません。

したがって,javax.servlet.ServletResponseクラスのsetContentLengthメソッドを使用する場合とjavax.servlet.http.HttpServletResponseクラスのレスポンスヘッダを追加・変更するAPIを使用する場合は,次の点に注意してください。

注※

レスポンスヘッダを追加・変更するAPIとは,javax.servlet.http.HttpServletResponseクラスの次のメソッドを指します。

  • setHeaderメソッド

  • addHeaderメソッド

  • setIntHeaderメソッド

  • addIntHeaderメソッド

(4) HTTPレスポンスのデータ出力に関する注意事項

javax.servlet.ServletResponseクラスのgetOutputStreamメソッド,またはgetWriterメソッドによってServletOutputStreamまたはPrintWriterを取得し,HTTPレスポンスを出力する場合は,次の点に注意してください。

(5) アプリケーションでHTTPレスポンスを圧縮する場合の注意事項

アプリケーションで圧縮したHTTPレスポンスには,HTTPレスポンス圧縮機能が有効にならないように設定してください。アプリケーションで圧縮したHTTPレスポンスに対して,HTTPレスポンス圧縮機能を有効にした場合の動作は保証できません。