
静的ファイルを提供する 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、「コンテンツの長さ」および以下のセクションの一部。