【问题标题】:Safari Sends Two HTTP Req. Same Time/SocketSafari 发送两个 HTTP 请求。同一时间/套接字
【发布时间】:2013-03-11 12:13:21
【问题描述】:

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

我认为即使在 Keep Alive HTTP 1.1 连接上,也应该有明确的请求/响应顺序。

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

情况: 我有一个 HTML5 加载 SVG 并进一步引用其他图像(如 PNG 和 GIF)。问题不是在 iPhone 5 上出现,而是在 iPad 上。

请查看此 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]

【问题讨论】:

  • 你确定这就是正在发生的事情,而且它们不仅仅是在wireshark中被错误排序吗?看起来这些请求在 Wireshark Trace 中得到了正确响应。
  • 第二个请求是8081端口,第一个请求是哪个端口?默认80?当每个请求针对不同的资源时,一次发送多个请求通常没有问题。不同端口上的请求将显示为对不同资源的请求。
  • 是的,这正是问题所在,两个 HTTP GET 请求都是在同一时间(约 30 毫秒)和同一个保持活动状态的套接字(相同的源和目标端口)上发送的。 Web 服务器只在 600 毫秒后响应第一个请求,导致客户端卡住!实际上,我以前从未见过,我想知道问题是来自客户端还是来自服务器?是否符合 HTTP1.1 标准?

标签: http tcp safari wireshark http-1.1


【解决方案1】:

看起来像HTTP pipelining:

HTTP 流水线是一种技术,其中多个 HTTP 请求 在单个 TCP 连接上发送而无需等待相应的 回复。

【讨论】:

    【解决方案2】:

    我认为这可能是由于浏览器遵循 HTTP 1.1 Spec 8.2.4。如果客户端通过中间层连接到服务器并且在连接关闭之前没有得到服务器的响应,这确实允许客户端重试请求。

    我已看到此错误,并发现以下链接很有帮助。

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

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

    【讨论】:

      【解决方案3】:

      我也从移动 Safari 客户端看到了这一点。我能找到的唯一解决方法是在 Nginx 中为整个服务器禁用 keepalive。当 keepalive 被禁用时,我们不会收到重复的请求和/或流水线可能无法从 Safari 客户端工作。

      在 Nginx 中,有一个 keepalive_disable 选项,但它只适用于某些浏览器上的 POST 请求,并且没有太多选项。我们最终使用 keepalive_timeout 0 禁用了该服务器上的 keepalive;希望以后有更好的解决方案。

      我认为正确使用流水线会提交多个不同的请求,而不是重复的请求。

      【讨论】:

        猜你喜欢
        • 2022-11-02
        • 2013-05-14
        • 2012-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多