PUT的跨域jQuery $ .ajax请求失败(Access-Control-Allow-Methods不允许使用Method PUT。)

时间:2013-07-17 14:15:21

标签: jquery ajax cross-domain put

我正在通过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请求 那实际上是有效的。

这种行为的原因是什么?

1 个答案:

答案 0 :(得分:17)

显然,浏览器首先发送OPTIONS请求,以确定是否允许PUT(或DELETE)次请求。
由于我在OPTIONS中未允许使用Access-Control-Allow-Methods方法,因此在Firefox之后PUT请求失败了。
OPTIONS添加到Access-Control-Allow-Methods解决了问题:

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