Cosminexus 機能解説
(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を使用してContent-Lengthヘッダ,Content-Encodingヘッダを設定するフィルタを追加している場合は,レスポンス圧縮用フィルタよりもあとに実行されるようにDD(web.xml)で定義してください。
- ServletResponseクラスのsetContentLengthメソッド
- HttpServletResponseクラスのレスポンスヘッダを追加・変更するAPI※
- HTTPレスポンスのレスポンスボディが圧縮される場合,ServletResponseクラスのsetContentLengthメソッド,およびHttpServletResponseクラスのレスポンスヘッダを追加・変更するAPI※を使用しても,HTTPレスポンスのContent-Lengthヘッダは付加されません。Content-Lengthヘッダが付加されていないHTTPレスポンスはWebコンテナによってchunk形式でクライアントに送信されます。
- HTTPレスポンスのレスポンスボディが圧縮される場合,HttpServletResponseクラスのレスポンスヘッダを追加・変更するAPI※を使用してもContent-Encodingヘッダには値が設定されません。レスポンスボディが圧縮される場合は,WebコンテナによってContent-Encodingヘッダにgzipが指定されます。
- 注※
- レスポンスヘッダを追加・変更するAPIとは,javax.servlet.http.HttpServletResponseクラスの次のメソッドを指します。
- setHeaderメソッド
- addHeaderメソッド
- setIntHeaderメソッド
- addIntHeaderメソッド
(4) HTTPレスポンスのデータ出力に関する注意事項
javax.servlet.ServletResponseクラスのgetOutputStreamメソッド,またはgetWriterメソッドによってServletOutputStreamまたはPrintWriterを取得し,HTTPレスポンスを出力する場合は,次の点に注意してください。
- ServletOutputStreamまたはPrintWriterを使用して,HTTPレスポンスのバッファにデータを書き出している状態で,ServletResponseのsetContentTypeメソッドを呼び出した場合,圧縮するように指定されたMedia-Typeを持つHTTPレスポンスであっても圧縮されません。
ただし,圧縮するMedia-Typeにアスタリスク(*)が指定されているときは圧縮されます。
- Media-Typeを指定してJSPの出力を圧縮するためには,pageディレクティブのcontentType属性を指定するか,またはJSPのバッファを超える前にServletResponseクラスのsetContentTypeメソッドを呼び出す必要があります。
(5) アプリケーションでHTTPレスポンスを圧縮する場合の注意事項
アプリケーションで圧縮したHTTPレスポンスには,HTTPレスポンス圧縮機能が有効にならないように設定してください。アプリケーションで圧縮したHTTPレスポンスに対して,HTTPレスポンス圧縮機能を有効にした場合の動作は保証できません。
All Rights Reserved. Copyright (C) 2006, 2007, Hitachi, Ltd.