2

Java サーブレットに支えられた Web サービスがあります。このサービスは、古いバージョンの Flash で使用されています。このバージョンの Flash ではURLLoaderチャンクされたレスポンスが機能しないことがわかりました。チャンクされた応答がサーバーから受信されることはありません。

Glassfish を使用してサーブレットをホストしています。サーバー全体のチャンクを無効にする方法は知っていますが、それは悪い考えのようです (そうですか?)。

リクエストごとにチャンクを無効にする標準的な方法はありますか? 呼び出してみServletResponse.setBufferSize(SOME_LARGE_VALUE)ましたが、驚くべきことに、これはチャンクを使用するというサーバーの決定に影響しませんでした。

4

1 に答える 1

2

javadocからHttpServlet#doGet():

...

Content-Length可能な場合は、 (メソッドを使用して) ヘッダーを設定しServletResponse.setContentLength(int)、サーブレット コンテナーが永続的な接続を使用してクライアントに応答を返すことを許可し、パフォーマンスを向上させます。応答全体が応答バッファー内に収まる場合、コンテンツの長さは自動的に設定されます。

HTTP 1.1 チャンク エンコーディング (つまり、応答にTransfer-Encodingヘッダーがある) を使用する場合は、ヘッダーを設定しないでくださいContent-Length

...

そのため、応答コンテンツの長さをあらかじめ設定しておくと、チャンク エンコードで送信されません。

response.setContentLength(contentLength);
// ...

更新<jsp:include>: また、サーブレットがorによって呼び出されていないことを確認する必要もありますRequestDispatcher#include()その javadocも参照してください。

...

オブジェクトにはServletResponseパス要素があり、パラメーターは呼び出し元から変更されません。含まれているサーブレットは、応答ステータス コードを変更したり、ヘッダーを設定したりすることはできません。変更しようとしても無視されます。

...

于 2011-09-29T02:01:02.680 に答える