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

Hor*_*ren 8 ajax jquery put cross-domain

我正在通过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');
Run Code Online (Sandbox Code Playgroud)

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

这种行为的原因是什么?

Hor*_*ren 17

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

header('Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS');
Run Code Online (Sandbox Code Playgroud)