2013-03-21 158 views
1

我有一個IPad Safari在30毫秒內發送兩個HTTP請求(兩個不同的PNG)文件。Safari發送兩個HTTP請求。同一時間/插座

我認爲,即使在保活HTTP 1.1連接應該有請求/響應的一個清除序列。

我看到的是,Safari瀏覽器在30毫秒內發送兩個GET請求而無需等待答案。這在一些Web服務器中導致問題。

情況: 我有一個HTML5加載SVG與其它圖像(如PNG和GIF)進一步引用。這個問題在IPhone 5上不會發生,但在IPad上。

請SEEE這Wireshark的轉儲: http://tinyurl.com/c7m37b9 (幀116/117)

iPad的(1)的相關信息: 版本5.1.1(9B206) 型號MB2292FD 的Safari 5.1

[GET /Licht_3.gif HTTP/1.1 
... 
User-Agent: Mozilla/5.0 (iPad; CPU OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML,  like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3 
Accept: */* 
... 
Accept-Language: de-de 
Accept-Encoding: gzip, deflate 
Connection: keep-alive] 

[GET /Licht_3.gif HTTP/1.1 
Host: 192.9.225.251:8081 
... 
Accept-Language: de-de 
Accept-Encoding: gzip, deflate 
Connection: keep-alive] 

[HTTP/1.1 200 OK 
... 
Content-Type: image/png 
Content-Length: 3921] 
+0

你確定這是發生了什麼,而他們不只是在被亂序Wireshark的?看起來這些請求在Wireshark Trace中正確響應。 – Kylar 2013-03-26 01:51:37

+0

第二個請求是端口8081.哪個端口是第一個請求?默認80?當每個請求針對不同的資源時,一次發送多個請求通常沒有問題。不同端口上的請求將顯示爲對不同資源的請求。 – Octopus 2013-03-26 07:34:15

+0

是的,正是這個問題,兩個HTTP GET請求都是在同一時間(〜30 ms)和同一個保持活動套接字(相同的源和目標端口)上發送的。並且Web服務器在第一個請求中僅在600毫秒後回答,導致客戶端卡住! 其實,我從來沒有見過,我想知道如果問題來自客戶端或從服務器? HTTP1.1是否符合? – Matthias 2013-03-26 11:40:41

回答

2

它看起來像HTTP pipelining

HTTP流水線是一個技術,其中多個HTTP請求是在單個TCP連接上發送的 而不等待對應的 響應。

0

我從一個移動Safari瀏覽器的客戶端看到這一點。我能找到的唯一解決方法是在Nginx中禁用整個服務器的keepalive。當Keepalive被禁用時,我們不會收到重複的請求和/或流水線可能無法從Safari客戶端運行。

在Nginx的,有keepalive_disable的選擇,但它僅適用於某些瀏覽器POST請求,並且不會有很多選擇。我們最終使用keepalive_timeout 0禁用了該服務器上的keepalive;我希望將來有更好的解決方案。

我認爲正確的使用了管道將提交的,而不是重複的請求,多個不同的請求。