我正在尝试从domain.com向a.domain.com发出CORS请求POST。
我的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
POST REQUEST
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryjwr5Pk7WBcfzMdbO
Origin:http://domain.com:3000
Referer:http://domain.com:3000/home
并且POST
请求被取消/失败。
我的问题是,我是否还需要在POST控制器上拥有access-control-allow-origin?
我有一个用于授权的Cookie,其域名为.domain.com
,Cookie在请求中发送过一次,现在没有发送。知道为什么会这样吗?
答案 0 :(得分:80)
是的,您需要在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
以匹配请求的标头。
答案 1 :(得分:-20)
如果您使用PHP添加以下行
header ( " Access -Control- Allow-Origin : *") ;
header ( " Access- Control-Allow -Headers : *") ;
可能解决您的问题