我试图使CORS请求从domain.com发送到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
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 具有在请求中一次发送过cookie的域,并且现在不发送。知道为什么会发生吗?
.domain.com
是的,您需要具有标头,Access-Control-Allow-Origin: http://domain.com:3000或者Access- Control-Allow-Origin: *同时具有OPTIONS响应和POST响应。您还应该Access-Control-Allow- Credentials: true在POST响应中包含标头。
Access-Control-Allow-Origin: http://domain.com:3000
Access- Control-Allow-Origin: *
Access-Control-Allow- Credentials: true
您的OPTIONS响应中还应包含标头,Access-Control-Allow-Headers: origin, content-type, accept以匹配请求的标头。
Access-Control-Allow-Headers: origin, content-type, accept