【问题标题】:iOS Safari random slow image loading with iisnode使用 iisnode 加载 iOS Safari 随机慢速图像
【发布时间】:2016-08-11 03:31:44
【问题描述】:

我在 node.js 上有一个网站。我使用 iisnode 托管应用程序。

我有一个页面以 Pinterest 之类的风格显示大量照片。图像以纯 <img /> 的形式加载,并将适当的 src 附加到 DOM。图片是服务器上的纯静态资源。

所有图像在最新的 Windows Chrome、Android Chrome 甚至 iOS Chrome 上几乎都是即时加载的。

但是,在 iOS Safari 上,对于每百张照片,随机地,不会立即加载一两张照片,而是在大约 20-30 秒内加载这些照片。 Safari 开发人员调试器说该图像请求有 20-30 秒的延迟。

如果我不使用IISNode,直接使用node.exe作为web服务器,问题就不存在了。我怀疑 IISnode 和 iOS Safari 之间存在一些奇怪的兼容性问题。在我看来,IISNode 在 iOS Safari 中触发了一些阻止 HTTP 连接的东西。

这个问题的原因是什么?

【问题讨论】:

    标签: node.js mobile-safari iisnode


    【解决方案1】:

    这种情况与HTTP头Connection:keep-alive有关。

    IIS 被设计为不包含响应头 Connection:keep-alive,因此 IISNode 在这里也不例外。对于桌面浏览器和 Android 浏览器,这种行为可能是可以的。但是,如果没有 Connection:keep-alive,iOS Safari 似乎会遇到我称之为 TCP 剥夺的情况,即旧连接未被重用且无法创建新连接,因为旧连接仍处于打开状态且限制已达到打开连接的总数。我个人认为这个理论解释了 20-30 秒的延迟行为。在这 20-30 秒结束时,旧连接最终关闭,可以建立新连接。

    iOS Safari 和 IISNode 的组合导致了该问题。因为不可能让 IIS 包含 Connection:keep-alive。在没有 IISNode 代理层的情况下直接为 Node.exe 中的所有内容提供服务是解决此问题的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 2014-02-21
      • 1970-01-01
      相关资源
      最近更新 更多