【问题标题】:Safari AJAX bug - Failed to load resourceSafari AJAX 错误 - 无法加载资源
【发布时间】:2017-07-15 01:25:39
【问题描述】:

从今天开始,我正在开发的一个网络应用程序中出现了一个非常奇怪的错误。我没有对代码做任何事情,一天又一天出现了这个错误:

我向运行 MAMP PRO 的本地服务器执行 AJAX 请求(不是使用 jquery,而是使用普通 js)。在 chrome 和 firefox 中一切正常(在 mac 上测试)。但在 safari 中,请求总是抛出错误:Failed to load resource: the network connection was lost

当我尝试手动(而不是通过 AJAX)加载请求的 url 时,一切正常。我还用 setTimeout 测试了请求,发现了一些有趣的东西:

当我在页面加载后(最多 60 毫秒)直接发出请求时,一切正常。之后,连接会偶尔丢失,直到 6000 毫秒后一切正常!非常奇怪的行为......我没有使用任何其他 setTimeouts,所以问题只能由 safari 引起。

我做错了什么还是这只是一个非常新的 safari 错误?

【问题讨论】:

  • 这里也一样,还有 ajax,99% 的时间可以,1% 的时间不行。在 ios safari 和 mac safari 上测试。如果有一天您找到解决方案,请更新此内容,谢谢。

标签: javascript ajax networking safari xmlhttprequest


【解决方案1】:

我在其他地方看到有人提到 Mac 上的 Safari 在保持活动状态方面存在问题。有些人发布的解决方案是在服务器的mac上禁用keep alive for safari。

BrowserMatch "Safari" nokeepalive

【讨论】:

  • 这是一个旧答案,但使用这个(或只是 KeepAlive off)似乎并不能解决这个问题(在 Safari 12.0 和 Apache 2.4.25 上测试)。
【解决方案2】:

在为我们的网络应用开发一项大型新功能时,我们也遇到了这个问题。我们使用来自 JS 客户端的 XHR 请求从托管在 Amazon Linux 上的 Tomcat 服务器获取用户收藏。初始连接按预期工作正常。但是,第二个相同的请求在客户端 JS 控制台中失败并显示“加载资源失败:网络连接丢失”。我怀疑 Safari 将第二个请求识别为第一个请求的错误副本。

我们对 Tomcat 使用的当前解决方法是有效地禁用 KeepAlive 支持。不幸的是,这会影响所有连接,而不仅仅是桌面和/或移动设备上的 Safari。 Tomcat的这个解决方案是在${CATALINA_HOME}/conf/server.xml中的HTTPS连接器上设置一个参数...

maxKeepAliveRequests="1"

可能还有其他解决方案可以限制仅对 Safari 连接造成的损害。如果我发现它们,我会回来更新这篇文章。更好的创可贴是将结果缓存在我们的应用中并完全避免该问题。

【讨论】:

    猜你喜欢
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 2013-12-20
    • 2015-12-05
    • 2017-05-16
    • 1970-01-01
    相关资源
    最近更新 更多