【问题标题】:XHR not firing in Safari on MacXHR 没有在 Mac 上的 Safari 中触发
【发布时间】:2026-02-18 09:35:01
【问题描述】:

最近我遇到了一个问题,即我的 XMLHttpRequest 并不总是在第一次加载时被触发。我正在尝试从内部 url 检索数据到 php 页面。

Network 选项卡中的错误属于 type XHR methodscheme HTTPS 所有其他(状态、缓存,大小,传输,延迟,持续时间)是一个“ - ”。 打开给定调用的资源只是“尝试加载资源时发生错误”。正如预期的那样。

查看 控制台 选项卡我收到一条错误消息,指出“加载资源失败:网络连接丢失。”。

页面加载后,我可以在控制台选项卡中手动执行 JS 并成功。我已尝试在文档准备好后强制执行该事件,但这对给定问题没有影响。

所有这一切中最糟糕的部分是它不是一个一致的问题。

我在 * 上找到了一些类似的帖子,但似乎没有明确的答案。 希望这些帖子也可以为我的查​​询增加一些价值:

我个人并不拥有 Mac,因此我正在研究一位同事的一些额外信息,我可以提供的是它是 macOS Sierra 版本 10.12.6 并且它运行的 Safari 版本是版本 11.0 (12604.1.38.1.7)

该问题仅发生在 safari 上,而不会发生在其他浏览器上。 希望我的帖子包含足够的信息,因为这是我的第一篇 * 帖子。

提前致谢!

【问题讨论】:

    标签: networking safari xmlhttprequest


    【解决方案1】:

    这很可能是由以下之间的一些奇怪的交互引起的:

    • 特定的 SSL/TLS 证书(最著名的是 Let's Encrypt)
    • Safari 是唯一不支持 TLS 会话票证的主要浏览器(TLS 会话恢复的较新选项)
    • Web 服务器(TLS 服务器)提供 TLS 会话 ID(用于 TLS 会话恢复的旧选项),但不存储实际会话,因此实际上不允许会话恢复

    缓解选项:

    • 在 HTTP 中禁用 keep-alive(例如,通过使用“Connection: close”标头响应),理想情况下仅适用于 Safari(检查 useragent)
    • 实际上支持 TLS 会话(nginx:“ssl_session_cache shared:SSL:10m”;nodejs:实现 newSession/resumeSession 事件)

    资源:

    【讨论】:

      【解决方案2】:

      我遇到了类似的 css 文件未加载问题

      加载资源失败:网络连接丢失

      这是因为服务器端的压缩过滤器。 我禁用了内容类型的压缩过滤器,问题得到解决。

      如果您通过任何其他方式解决了问题,请分享。

      【讨论】:

        最近更新 更多