実際に HTTP 応答を終了しているものが何であるかを知るにはどうすればよいですか?

実際に HTTP 応答を終了しているものが何であるかを知るにはどうすればよいですか?

静的ファイルを提供する Web サーバーがあります。サーバーの負荷が高いときには、200 HTTP ステータスの部分的な応答が送信されます。

これは私のアプリにとって問題です。なぜでしょうか?

  • これらのファイルは静的であり、変更されるべきではないため、ファイルを長期間保持することを目的としたキャッシュ ヘッダーを応答に設定しています。
  • 時々、エンド ユーザーが HTTP ステータス 200 で JavaScript ファイルの一部のみを取得することがあります。
  • このファイルはブラウザによってキャッシュされ、アプリが壊れてしまいます。

2 つの異なる Web サーバー (Jetty と Apache) を試してみましたが、両方で、それらの前にロード バランサー (haproxy) があってもなくても、問題が発生していることがわかりました。これは、Web サーバー自体の問題ではないと思いますが、これは高負荷の Web サーバーで予想される動作なのでしょうか?

この問題の原因を突き止める方法、またはこの問題から身を守る方法を教えてください。

編集: これらのリクエストにはContent-Length応答ヘッダーも提供されます。

答え1

問題が発生していることを示すパケット キャプチャが必要です。すべての機能が正常に動作しているが、エンド ユーザーのブラウザーにバグがあるか、バグのある Web プロキシ、ファイアウォール、または NAT ゲートウェイの背後にいて、ファイルが切り捨てられている可能性があります。

サーバー/リバースプロキシ/ロードバランサーが、そのJSファイルを提供する際にContent-LengthヘッダーとTransfer-Encodingヘッダーをどのように処理しているかを確認した方が良いかもしれません。また、これらのルールも確認してください。RFC 7230 セクション 3.3.2、「コンテンツの長さ」および以下のセクションの一部。

関連情報