13

Tomcat 6.0.29 サーバーと JDK 1.6 で Web アプリケーションを実行しています。

クライアントに応答を送信すると、Tomcat が送信します

Transfer-Encoding: chunked 

応答サイズが 8KB を超える場合、ヘッダーに 応答が 8KB 未満の場合、送信します

Content-Length : 

チャンク エンコーディングが一括応答を処理するための推奨される方法であることは理解していますが、クライアントはコードを変更したくありません (サーバー全体に分散されているため)。

Tomcat で Chunked エンコーディングを無効にするにはどうすればよいですか?

Tomcat で HTTP/1.1 を無効にして、HTTP/1.0 を有効にすることができました (これを行う方法がわからない)

次のことを試しましたが、成功しませんでした:

  1. のConnectorタグでserver.xml、設定しましたbufferSize =" 65536"

    Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           bufferSize="65536" socketBuffer="65536"
           redirectPort="8443" />
    
  2. 次の構成で server.xml で NIOConnector を使用します。

    <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
           connectionTimeout="20000"
           socket.directBuffer="false"
           socket.rxBufSize="25188"
           socket.txBufSize="43800"
           socket.appReadBufSize="32768"
           socket.appWriteBufSize="32768"
           socket.bufferPool="500"
           socket.bufferPoolSize="100000000"
           socket.processorCache="500"
           socket.keyCache="500"
           socket.eventCache="500"
           socket.tcpNoDelay="false"
           socket.soKeepAlive="true"
           socket.soTimeout="5000"
           redirectPort="8443" />
    
4

3 に答える 3

8

私がそれを機能させる唯一の方法は、応答時に BufferSize を設定することです。

response.setBufferSize()Content-Length応答サイズのヘッダーを設定します。応答サイズが bufferSize を超えると、 にフォールバックしTransfer-Encoding: Chunkedます。バッファ サイズは適切な値に設定する必要があります。より高い値に設定すると、フラッシュする前にすべての応答がメモリにバッファされます。したがって、値は楽観的なサイズに設定する必要があります。

Content-Length応答ヘッダーに依存しているクライアントはほとんどありません。下位互換性のためにこれを設定する必要があります。デフォルトでは、Tomcat のバッファ サイズは 8K に設定されています (Weblogic/Websphere の場合、これは 32K バイトだと思います)。

于 2011-10-26T16:39:55.673 に答える
3

私の知る限り、Tomcat でチャンク出力を無効にするには、サーブレットでコンテンツ長ヘッダーを指定する必要があります。

于 2011-10-24T20:01:07.473 に答える
1

[Connection: close] ヘッダーを応答に追加すると、Tomcat が [Transfer-Encoding: chunked] ヘッダーを追加できなくなります。

于 2015-02-28T21:22:38.710 に答える