【问题标题】:Cross domain jQuery $.ajax request fails for PUT (Method PUT is not allowed by Access-Control-Allow-Methods.)PUT 的跨域 jQuery $.ajax 请求失败(Access-Control-Allow-Methods 不允许方法 PUT。)
【发布时间】:2013-07-17 14:15:20
【问题描述】:

我正在通过 jQuery 的 $.ajax 进行跨域请求以访问 RESTful PHP API。
为此,我在 PHP 中设置了以下标头:

header("HTTP/1.1 $code $status");
header('Content-type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PUT');

使用GETPOST 类型没有问题。但是,当我执行 PUT ajax 调用时,Firefox 完全失败并在 Firebug 的网络选项卡中显示 OPTIONS api.php
在 Chrome 中,同样的事情首先发生(OPTION 请求失败并显示消息 Method PUT is not allowed by Access-Control-Allow-Methods.)但 Chrome 会跟进实际的 PUT 请求 那实际上是有效的。

这种行为的原因是什么?

【问题讨论】:

    标签: jquery ajax cross-domain put


    【解决方案1】:

    显然浏览器首先发送了一个OPTIONS 请求,以确定是否允许PUT(或DELETE)请求。
    由于我没有在 Access-Control-Allow-Methods 中允许 OPTIONS 方法,所以它失败了,在 Firefox 之后的 PUT 请求也是如此。
    OPTIONS 添加到Access-Control-Allow-Methods 解决了这个问题:

    header('Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-29
      • 2016-05-25
      • 2013-12-07
      • 2016-03-11
      • 2019-04-28
      • 2018-10-31
      • 2016-03-14
      相关资源
      最近更新 更多