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

IT技术 javascript jquery cors
2021-02-01 13:39:45

我正在尝试从 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

发布请求

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 的在请求中发送一次,但现在没有发送。知道为什么会这样吗?

1个回答

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

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

协议可以省略吗?或者你可以添加一个 http 和 https 吗?
2021-03-15 13:39:45
Access-Control-Allow-Origin: * 不再允许。您必须手动添加标题。
2021-03-30 13:39:45
协议不能省略,必须使用域、协议和端口
2021-04-01 13:39:45