Chrome 不知道 POST 请求

Posted

技术标签:

【中文标题】Chrome 不知道 POST 请求【英文标题】:Chrome Unaware of POST Request 【发布时间】:2014-09-02 09:58:46 【问题描述】:

我知道这个标题听起来很奇怪,但让我描述一下我看到的行为:

我正在通过 jQuery 的 $.ajax 方法进行 AJAX POST 调用 此 AJAX 调用设置了最大超时时间以及几个自定义标头 Chrome 发送 OPTIONS 请求并获得 200 响应(如“网络”选项卡中所示) 此后,Chrome 不会在“网络”选项卡中显示传出的POST 请求,随后 AJAX 调用就会超时。

这是奇怪的部分:

虽然请求未列在“网络”选项卡中,但通过 WireShark 观察网络流量可以清楚地显示出一个传出请求和来自服务器的即时(成功)响应。 这仅限于 Mac 上的 Chrome...所有其他浏览器都不会显示此问题 即使所有 Chrome 版本都相同,Mac 上的 Chrome 也有少数(极少数)实例不显示此问题。

这是我正在使用的 JS sn-p:

$.ajax(
    "type":"POST",
    "cache":false,
    "dataType":"json",
    "url":"http://myserver.com/endpoint",
    "crossDomain":true,
    "xhrFields":
        "withCredentials":true
    ,
    "contentType":"application/x-www-form-urlencoded",
    "headers":
        "X-Test-Header.valueA":"123",
        "X-Test-Header.valueB":"456"
    ,
    "data":"a=something",
    "timeout":10000
);

有什么可能导致这种情况的想法吗?

【问题讨论】:

是否可以发布您的http://myserver.com/endpoint 进行测试?此外,是否可以分享您使用的 Chrome 版本/构建以及您也在使用哪种服务器端语言?谢谢。 试过Log XMLHttpRequestsdevtools ? 确保您没有在网络标签中意外应用过滤器 你的问题已经解决了吗? 【参考方案1】:

目的地是否收到请求?

我会从 ajax 调用参数中删除多余的 ",因为在这种情况下不需要它们("type": -> type:) 至少是奇怪的那个。

还有什么在 /endpoint ?一个php脚本?为什么不是/endpoint/script.php?

【讨论】:

是的,目的地收到了请求。正如我所提到的,看看 WireShark,机器甚至确实得到了预期的响应。至于端点 URL:这只是一个示例。真正的是有效的(同样,响应确实会返回到机器,只是 Chrome 不知道)。

以上是关于Chrome 不知道 POST 请求的主要内容,如果未能解决你的问题,请参考以下文章

python上传图片头像。一个post 提交不知道怎么写?这样的

CORS:在成功的 OPTIONS 请求后,Firefox 不发送 POST 请求......适用于 Chrome 和 IE

CORS:成功 OPTIONS 请求后,Firefox 不发送 POST 请求……在 Chrome 中有效

java http post 怎么设置 raw格式

postman post请求 header 和body怎么用

从 Java servlet 中的 POST 请求获取请求有效负载