CORS和Access-Control-Allow-Header如何工作?

时间:2012-09-27 21:24:14

标签: javascript jquery cors

我正在尝试从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在请求中发送过一次,现在没有发送。知道为什么会这样吗?

2 个答案:

答案 0 :(得分:80)

是的,您需要在OPTIONS响应和POST响应上都有标头Access-Control-Allow-Origin: http://domain.com:3000Access-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 : *") ;

可能解决您的问题