我正在通过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');
使用GET
和POST
类型可以正常运行。但是,当我执行PUT
ajax调用时,Firefox完全失败,并在Firebug的网络选项卡中显示OPTIONS api.php
。
在Chrome中,首先发生同样的事情(OPTION
请求失败并显示消息Method PUT is not allowed by Access-Control-Allow-Methods.
),但Chrome会跟进实际的PUT
请求
那实际上是有效的。
这种行为的原因是什么?
答案 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');