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

Leo*_*rea 62 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();
  }
});
Run Code Online (Sandbox Code Playgroud)

首先,我看到OPTIONS路由被调用如下:

Request URL: https://a.domain.com/some/route
Request Method:OPTIONS
Status Code:200 OK
Run Code Online (Sandbox Code Playgroud)

选项要求:

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
Run Code Online (Sandbox Code Playgroud)

选项响应

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
Run Code Online (Sandbox Code Playgroud)

这个要求回来了200个说明.在我的服务器上,我有相同的路由POST方法,这是我得到的回报之后OPTIONS

Request URL:https://a.domain.com/some/route
Run Code Online (Sandbox Code Playgroud)

发出请求

Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryjwr5Pk7WBcfzMdbO
Origin:http://domain.com:3000
Referer:http://domain.com:3000/home
Run Code Online (Sandbox Code Playgroud)

并且POST请求被取消/失败.

我的问题是,我是否还需要在POST控制器上拥有access-control-allow-origin?

我有一个用于授权的cookie,该cookie具有cookie,.domain.com该cookie在请求中被发送过一次并且现在没有被发送.知道为什么会这样吗?

mon*_*sur 83

是的,您需要具有标题Access-Control-Allow-Origin: http://domain.com:3000Access-Control-Allow-Origin: *OPTIONS响应和POST响应.您还应该Access-Control-Allow-Credentials: true在POST响应中包含标题.

您的OPTIONS响应还应包含Access-Control-Allow-Headers: origin, content-type, accept与所请求标头匹配的标头.