首先,这里解决的不是忘了设置 Access-Control-Allow-*
头的问题,那个只有记得输出就可以了。
问题描述,执行如下jQuery代码:
var settings = {
"async": true,
"crossDomain": true,
"url": "http://192.168.1.1/test_path/?m=test/cors",
"method": "POST",
"headers": {
"content-type": "application/json"
},
"processData": false,
"data": "{"OK":123}"
}
$.ajax(settings).done(function (response) {
console.log(response);
});
"async": true,
"crossDomain": true,
"url": "http://192.168.1.1/test_path/?m=test/cors",
"method": "POST",
"headers": {
"content-type": "application/json"
},
"processData": false,
"data": "{"OK":123}"
}
$.ajax(settings).done(function (response) {
console.log(response);
});
服务器返回如下HTTP头:
HTTP/1.1 405 Not Allowed
Server: nginx
Date: Tue, 01 Aug 2017 15:20:43 GMT
Content-Type: text/html
Content-Length: 570
Connection: keep-alive
Server: nginx
Date: Tue, 01 Aug 2017 15:20:43 GMT
Content-Type: text/html
Content-Length: 570
Connection: keep-alive
问题在哪里,如果我们单独创建一个文件又是正常的,有时候甚至开始怀疑底层的PHP代码是否干了什么事情,但是这里的逻辑单独创建一个文件又一点问题都没有。注意了,单独创建一个文件。
然后我把地址该了一下,改为http://192.168.1.1/test_path/index.php?m=test/cors,紧接着,奇迹发生了。
服务器返回了如下类容:
HTTP/1.1 204 No Content
Server: nginx
Date: Tue, 01 Aug 2017 15:26:06 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Access-Control-Allow-Origin: http://localhost:4005
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: x-requested-with,content-type,cache-control
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Server: nginx
Date: Tue, 01 Aug 2017 15:26:06 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Access-Control-Allow-Origin: http://localhost:4005
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: x-requested-with,content-type,cache-control
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
到此,问题找到,怎么解决就不说了,发现问题,找到原因就好,解决的方案有很多,不废话。这里只是记一种现象,针对nginx的目录配置,很有可能是不支持OPTIONS请求的。
又学到知识了,感谢博主分享。