CORS和Access-Control-Allow-Headers如何工作?
我正在尝试使CORS请求从domain.com POST到a.domain.com。
我的JavaScript看起来像这样
$('#fileupload').fileupload({ xhrFields: { withCredentials: true }, dataType: 'json', url: $('#fileupload').data('path'), singleFileUploads: true, add: function(e, data){ data.submit(); } });
起初,我看到OPTIONS路线被这样调用:
Request URL: https://a.domain.com/some/route Request Method:OPTIONS Status Code:200 OK
选项要求:
Access-Control-Request-Headers:origin, content-type, accept Access-Control-Request-Method:POST Host:a.domain.com Origin:http://domain.com:3000 Referer:http://domain.com:3000/home
选项响应
Access-Control-Allow-Credentials:true Access-Control-Allow-Methods:POST Access-Control-Allow-Origin:http://domain.com:3000 Connection:keep-alive Content-Length:0 Content-Type:text/html;charset=utf-8
这个要求回来了200像说的。 在我的服务器上,我有与POST
方法相同的路由,这是我得到的OPTIONS
后的回报
Request URL:https://a.domain.com/some/route
发布请求
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryjwr5Pk7WBcfzMdbO Origin:http://domain.com:3000 Referer:http://domain.com:3000/home
POST
请求被取消/失败。
我的问题是,我是否也需要在POST控制器上具有访问控制允许来源?
我有一个cookie的授权,有域.domain.com
该cookie发送一次请求中,它不是现在发送。 任何想法为什么会发生?
是的,您需要在OPTIONS响应和POST响应中都有标头Access-Control-Allow-Origin: http://domain.com:3000
或Access-Control-Allow-Origin: *
。 您还应该在POST响应中包含标题Access-Control-Allow-Credentials: true
。
你的OPTIONS响应还应该包含头部Access-Control-Allow-Headers: origin, content-type, accept
匹配请求的头。
如果您使用PHP添加以下行
header ( " Access -Control- Allow-Origin : *") ; header ( " Access- Control-Allow -Headers : *") ;
可能解决你的问题