【问题标题】:Why does IE issue random XHR 408/12152 responses using jQuery post?为什么 IE 使用 jQuery post 发出随机 XHR 408/12152 响应?
【发布时间】:2010-09-16 22:46:08
【问题描述】:

我刚刚遇到一个与 IE 相关的问题,网上似乎几乎没有关于此的文档 - 只有少数人提出了类似的问题。

当我使用 jQuery (1.4.2) 向我的服务器发送 POST 请求(服务器通过发送 JSON 数据来响应)时,我偶尔会收到 XHR 408 错误(这意味着服务器在等待客户端时超时完成它的请求)和(不太频繁)XHR 12152 错误(我不知道这些意味着什么)。这似乎没有规律。

这只发生在 IE 中(版本 8 - 我没有尝试过其他版本,但我可以确认问题发生在两个不同的安装中)。 Safari 和 Opera 看起来不错。

这似乎不是 GET 请求的问题。

如果有人对此事有任何想法,我将非常感激。

【问题讨论】:

  • 我相信 12152 类似于“服务器因数据库或服务器维护而暂时关闭,或者出现网络错误”。所以,基本上是超时。
  • 鉴于您遇到两个超时错误,您是否尝试过延长超时时间?
  • 也出现在 IE9 中。错误 12152 和错误 12031。似乎发生在 AJAX 请求中,并且到目前为止是不可预测的。

标签: ajax internet-explorer post


【解决方案1】:

当您看到 IE 在 status 返回的内容显然不是 HTTP 状态代码时,它们实际上是 Windows 错误号,通常来自 WinInet

12152 ERROR_HTTP_INVALID_SERVER_RESPONSE 似乎证实了408 的暗示,即您的浏览器和服务器之间存在低级 HTTP 语法问题。传统上,这一直是 XMLHttpRequest 的 ActiveX 实现和 HTTPS 中的 keep-alives 的问题,但确切的原因相当模糊。

您或许可以尝试在来自 IE 的 XMLHttpRequests 上设置服务器 Connection: close,看看是否有帮助?不幸的是,这会影响性能。

【讨论】:

  • 我刚刚花了一些时间来确保我的代码中没有任何东西可以负责,我倾向于认为 - 正如你所说 - 问题在于 IE 本身。作为一个 jQuery 的新手,你能告诉我如何在 POST 过程中发出“连接:关闭”吗?
  • 我认为你不能在来自 XMLHttpRequest 的请求上设置它,但你应该能够在来自服务器的响应上设置它。您可以在服务器上嗅探 User-Agent 以仅为 IE 设置标头,但鉴于服务器端 UA 嗅探的问题,最好从 JS 检测 IE(例如,使用条件注释)并传递像 @ 这样的参数987654327@ 告诉服务器这样做。我自己没有尝试过,有兴趣看看它是否能解决它。就个人而言,我得到的是日志中非常偶然的关闭套接字错误,仅来自 IE XMLHttpRequest。
  • 我认为已经解决了 - 我刚刚在 PHP 的标头中发送了一个“连接:关闭”。我一直在运行一个每两秒 POST 一次的 JS 脚本,到目前为止,它没有抛出任何错误,以前它会这样做。我会让它运行一段时间,但我认为你刚刚保存了我最近几个月所做的工作;谢谢!
  • Connection: close 响应标头似乎可以工作,但有时会一直失败(错误 12002)。您对此有更多想法吗?
  • @ramon_salla 你的request timed out
【解决方案2】:

我也通过在 ajax 标头中添加“连接:关闭”来解决它。

不需要在来自服务器的响应头中添加“Connection: close”。

我已经测试了触发 1000 个请求。

【讨论】:

  • 我收回我的话。您还需要在服务器端连接:关闭。
  • 如何在请求附近添加连接?连接是一项无法根据浏览器负责设置的 w3c 更改的信息。我尝试手动更改,但不起作用。
猜你喜欢
  • 2015-09-04
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 2022-08-06
  • 2012-10-22
  • 2020-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多