-->

Safari浏览器发送两个HTTP所需物品。 同一时间/插座(Safari Sends Two

2019-08-17 20:42发布

我有一个iPad的Safari发送30毫秒内的两个HTTP请求(两个不同的PNG)文件。

我认为,即使是在保持活动HTTP 1.1的连接应该有请求/响应的一个明确的序列。

我所看到的是,Safari浏览器发送30毫秒内的两个GET请求,而无需等待一个答案。 这会导致在某些网络服务器的问题。

现状:我有一个HTML5加载与其他图像(如PNG和GIF)还引用了SVG。 在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]

Answer 1:

它看起来像HTTP流水线 :

HTTP流水线是其中多个HTTP请求的单个TCP连接上,而无需等待对应的响应发送的技术。



Answer 2:

我认为,这可能是由于浏览器秉承HTTP 1.1规格8.2.4。 这确实允许如果客户端连接到服务器通的中间层和所述连接被关闭之前没有得到来自服务器的响应客户端重试该请求。

我已经看到了这个错误,并发现以下链接是有帮助的。

https://www.ravellosystems.com/blog/beware-http-requests-automatic-retries/

http://geek.starbean.net/?p=393



Answer 3:

我从一个移动Safari浏览器的客户端看到这一点。 唯一的解决办法我能找到是禁用保活在Nginx的整个服务器。 我们没有得到重复的请求和/或保活时被禁用流水线可能无法从Safari客户端。

在Nginx的,有一个keepalive_disable的选择,但它仅适用于某些浏览器POST请求,并且不会有很多选择。 我们结束了使用keepalive_timeout 0在该服务器上禁用存活; 我希望在未来更好的解决方案。

我认为正确的使用了管道将提交的,而不是重复的请求,多个不同的请求。



文章来源: Safari Sends Two HTTP Req. Same Time/Socket