2011-10-18 24 views
1

我在網站上看似隨機的客戶端有一些非常有趣的行爲。我看到的是隨機POST請求到服務器會導致對後端的錯誤請求。我追查了爲什麼請求不好 - 但我仍然不知道爲什麼發生這種情況。瀏覽器在發送POST-body之前空閒

  1. 客戶端通過HTTP連接到網絡服務器。
  2. 客戶端發送一個普通的POST請求頭(不是主體)
  3. 五秒鐘過去了。緩存服務器將請求傳遞給它的後端,因爲完成請求花費的時間太長。
  4. 緩存服務器向客戶端回覆並顯示錯誤消息,指示請求不好。
  5. 客戶端在收到回覆後幾秒鐘發送POST-body。

我沒有問題接受緩存服務器可以重新配置等待更長時間。我的問題是;什麼可能是客戶端在發送頭文件之間等待幾秒鐘併發送POST-body的原因?我不知道這種行爲是否合理。

這是一個相當普通的Magento電子商務網站,安裝了Haproxy - > Varnish - > Nginx - > php5-fpm。 Varnish是當五秒怠速過去時向Nginx發送請求的組件。

  • 我使用tcpdump/wireshark驗證服務器在Haproxy之前的時間內沒有收到來自客戶端的POST正文。
  • 我已經驗證了這個跨出現用戶代理,和整個的請求的類型(普通作爲登錄表單,以AJAX回調)

沒有人有任何巧妙的構思?

注意:我不確定這是Stack Overflow還是Serverfault的問題,但我認爲這是一個需要開發人員知識的HTTP問題。

回答

2

服務器有問題 - 您不應該將部分請求從前端發送到後端。在發送POST正文之前,客戶端可能正在等待服務器的HTTP/100 Continue響應。客戶端也可能生成POST數據,並且由於某種原因需要一些時間。

+0

這不是一個錯誤,它是一個配置的閾值。另外,客戶沒有發送'Expect:100-continue'。我還證實,這發生在普通的登錄表單上 - 應立即提供POST數據。 – Kvisle

+0

我目前最好的假設是客戶端正在等待一個確認,並且它被防火牆所佔用。 – Kvisle

相關問題