我如何知道什麼實際上終止了 http 回應?

我如何知道什麼實際上終止了 http 回應?

我有一個提供一些靜態文件的網頁伺服器。有時,當伺服器負載較重時,它會發送帶有 200 HTTP 狀態的部分回應。

這對我的應用程式來說是一個問題。為什麼?

  • 我在回應上設定了快取標頭,旨在長時間保留文件,因為這些文件是靜態的並且永遠不會改變。
  • 每隔一段時間,有些最終使用者就只能取得 HTTP 狀態為 200 的 JavaScript 檔案的一部分。
  • 該文件被瀏覽器緩存,並破壞了我的應用程式!

我嘗試了 2 個不同的 Web 伺服器(Jetty 和 Apache),並發現這兩個伺服器都發生了問題,無論它們前面是否有負載平衡器(haproxy)。這讓我覺得這不是網頁伺服器本身,儘管這可能是任何重負載下的網路伺服器的預期行為?

我怎樣才能找出導致此問題的原因,或採取預防措施?

編輯:這些請求也提供了Content-Length回應標頭。

答案1

您需要捕獲發生的問題的資料包。可能您的所有內容都正常,但最終用戶的瀏覽器有問題,或者是有問題的 Web 代理、防火牆或 NAT 網關正在截斷文件。

您可能想查看您的伺服器/反向代理/負載平衡器在提供 JS 檔案時如何處理 Content-Length 和 Transfer-Encoding 標頭。另請查看這些內容的規則RFC 7230 第 3.3.2 節“內容長度”以及以下一些部分。

相關內容