Internet Explorer 浏览器问题:浏览器未通过 Ajax 请求提交 POST 数据,服务器/客户端挂起

发布于 2024-12-18 15:33:19 字数 2055 浏览 0 评论 0原文

我遇到一个问题,浏览器没有从 ajax 请求提交 POST 数据,因此服务器等待它并挂起。浏览器(主要是IE8)会发送标头信息,内容长度为36,但服务器永远不会收到这36字节的数据。

这也描述了问题,其他人是否有其他解决方案:

IE调用同步 xm​​lhttprequest 时挂起 5 分钟

大约占所有请求的 10%。

什么会导致这个问题?有没有办法防范呢。这似乎主要发生在客户端。也许,用户会切断互联网连接并重新连接。

以下是框架代码的片段:

wicket-ajax.js: ... 客户端 JavaScript 调用:

  1. t.open("POST", url, this.async);
  2. t.onreadystatechange = this.stateChangeCallback.bind(this);
  3. t.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  4. // 设置一个特殊标志以允许服务器区分 ajax 和非 ajax 请求
  5. t.setRequestHeader("Wicket-Ajax", "true");
  6. t.setRequestHeader("接受", "text/xml");
  7. t.send(正文);

vÝ2011 年 11 月 28 日星期一 12:36:24¡ 000ee03c 0000999a - 详细信息:帖子
... Ý2011 年 11 月 28 日星期一 12:36:24¡ 000ee03c 0000999a - 详细信息:接受:
文本/xml
Ý2011 年 11 月 28 日星期一 12:36:24¡ 000ee03c 0000999a - 详细信息:
接受语言:en-us
Ý2011 年 11 月 28 日星期一 12:36:24¡ 000ee03c 0000999a - 详细信息:wicket-ajax:
真实
Ý2011 年 11 月 28 日星期一 12:36:24¡ 000ee03c 0000999a - 详细信息:推荐人:
https://data.com/l/launch/
Ý2011 年 11 月 28 日星期一 12:36:24¡ 000ee03c 0000999a - 详细信息:
wicket-focusedelementid: id1924
Ý2011 年 11 月 28 日星期一 12:36:24 ¡ 000ee03c 0000999a - 详细信息:内容类型: 应用程序/x-www-form-urlencoded
Ý2011 年 11 月 28 日星期一 12:36:24¡ 000ee03c 0000999a - 详细信息:
接受编码:gzip、deflate
Ý2011 年 11 月 28 日星期一 12:36:24¡ 000ee03c 0000999a - 详细信息:用户代理:
Mozilla/4.0(兼容;MSIE 8.0;Windows NT 5.1;Trident/4.0;.NET CLR 2.0.50727; MS-RTC LM 8)

Ý2011 年 11 月 28 日星期一 12:36:24¡ 000ee03c 0000999a - 详细信息:
内容长度:36
Ý2011 年 11 月 28 日星期一 12:36:24 ¡ 000ee03c 0000999a - 详细信息:缓存控制: 无缓存
Ý2011 年 11 月 28 日星期一 12:36:24 ¡ 000ee03c 0000999a - 详细信息:Cookie:
... 它发送标头请求数据,但仅此而已。

拱门配置: 服务器:带有 IHS 插件的 IBM Websphere 6。检票口 1.4.13。 Java6。客户端主要是Internet Explorer 8、9。兼容和非兼容模式。

I am experiencing an issue where the browser is not submitting POST data from an ajax request and so the server waits for it and hangs. The browser, mostly IE8 will send the header information and the content-length is 36 but the server never receives that 36 bytes of data.

This also describes the problem, does anyone else have other solutions:

IE hang for 5 minutes when calling synchronous xmlhttprequest

It happens about 10% of all the requests.

What would cause this issue? Is there a way to guard against it. It seems to happen mostly from the client side. And maybe, a user will cut their internet connection and connect back.

Here is a snippet from the framework code:

wicket-ajax.js:
...
Javascript call on the client-side:

  1. t.open("POST", url, this.async);
  2. t.onreadystatechange = this.stateChangeCallback.bind(this);
  3. t.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  4. // set a special flag to allow server distinguish between ajax and non-ajax requests
  5. t.setRequestHeader("Wicket-Ajax", "true");
  6. t.setRequestHeader("Accept", "text/xml");
  7. t.send(body);

vÝMon Nov 28 12:36:24 2011¨ 000ee03c 0000999a - DETAIL: POST
...
ÝMon Nov 28 12:36:24 2011¨ 000ee03c 0000999a - DETAIL: Accept:
text/xml
ÝMon Nov 28 12:36:24 2011¨ 000ee03c 0000999a - DETAIL:
Accept-Language: en-us
ÝMon Nov 28 12:36:24 2011¨ 000ee03c 0000999a - DETAIL: wicket-ajax:
true
ÝMon Nov 28 12:36:24 2011¨ 000ee03c 0000999a - DETAIL: Referer:
https://data.com/l/launch/
ÝMon Nov 28 12:36:24 2011¨ 000ee03c 0000999a - DETAIL:
wicket-focusedelementid: id1924
ÝMon Nov 28 12:36:24 2011¨ 000ee03c 0000999a - DETAIL: Content-Type:
application/x-www-form-urlencoded
ÝMon Nov 28 12:36:24 2011¨ 000ee03c 0000999a - DETAIL:
Accept-Encoding: gzip, deflate
ÝMon Nov 28 12:36:24 2011¨ 000ee03c 0000999a - DETAIL: User-Agent:
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR
2.0.50727; MS-RTC LM 8)

ÝMon Nov 28 12:36:24 2011¨ 000ee03c 0000999a - DETAIL:
Content-Length: 36
ÝMon Nov 28 12:36:24 2011¨ 000ee03c 0000999a - DETAIL: Cache-Control:
no-cache
ÝMon Nov 28 12:36:24 2011¨ 000ee03c 0000999a - DETAIL: Cookie:
...
It sends the header request data but that is ALL.

Arch Configuration:
Server: IBM Websphere 6 with IHS plugin. Wicket 1.4.13. Java6. The client side is mostly Internet Explorer 8, 9. Compatibility and Non Compat modes.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

瘫痪情歌 2024-12-25 15:33:19

这可能是缓存问题。我建议你通过更改每次提交的网址来进行伪造。所以,你的代码可能看起来像这样

    var d = new Date();
    t.open("POST", url+d.valueOf(), this.async);

所以,你的网址永远不会重复。这有助于防止缓存问题。

This could be the cache problem. I suggest you to fake by changing the url every submit. So, you code may look like this

    var d = new Date();
    t.open("POST", url+d.valueOf(), this.async);

So, your url will never be duplicated. This helps to prevent the cache problem.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文