0

これはSOの回答からです

GZIP圧縮に関しては、自分で行うべきではありません。サーバーに任せましょう。

コードを修正して、応答を圧縮しようとするすべての手動の​​試みを削除します。基本的には次のようになります。

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String json = createItSomehow();
    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().write(json);
}

以下は、HTTPコネクタのApacheTomcat7構成ページからのものです。

圧縮

コネクタは、サーバーの帯域幅を節約するためにHTTP /1.1GZIP圧縮を使用する場合があります。パラメータの許容値は、「off」(圧縮を無効にする)、「on」(圧縮を許可し、テキストデータを圧縮する)、「force」(すべての場合に圧縮を強制する)、または数値の整数値( 「on」と同等ですが、出力が圧縮される前のデータの最小量を指定します)。content-lengthが不明で、圧縮が「オン」以上に設定されている場合、出力も圧縮されます。指定しない場合、この属性は「オフ」に設定されます。

CompressionMinSize

圧縮が「オン」に設定されている場合、この属性を使用して、出力が圧縮される前のデータの最小量を指定できます。指定しない場合、この属性のデフォルトは「2048」です。

これは、圧縮がオンに設定されている場合を意味します。データは、2084より大きい場合にのみ圧縮されます。

私のAndroidクライアントでは、次のコードを使用して、データがgzip圧縮されているかどうかを確認しています

if ( entity.getContentEncoding() != null && "gzip".equalsIgnoreCase(entity.getContentEncoding().getValue())

私の質問

entity.getContentEncoding().getValue()サーバーは、データを圧縮したときの値も設定しますか?

4

1 に答える 1

1

entityサーバーは、Android アプリの内容について何も知りません。gzip が使用されている場合、Tomcat のコネクタはContent-Encoding応答ヘッダーを適切に設定します。

また、コードは必要以上に複雑です。これを行うことができます:

if ( "gzip".equalsIgnoreCase(entity.getContentEncoding().getValue())

...NPE の可能性がないためです。

于 2012-07-13T13:41:33.077 に答える