IE 11未发送带有CORS获取请求的cookie



我当前正在从localhost:8090进行ajax GET调用,调用内容如下:

$.ajax({
url: 'https://dev-855592.okta.com/api/v1/sessions/me',
method: 'GET',
dataType: 'json',
xhrFields: {
withCredentials: true
},
crossDomain: true,
success : function(data){
console.log(data);
},
error : function(data){
console.log('Session not found');
},
});

由于这是一个Okta呼叫,因此需要随请求一起发送Cookie。但是IE 11没有在请求中发送任何cookie。

我已经试过了:受信任站点的ie11设置中的"跨域访问数据源:已启用"。这个解决方案正在发挥作用。

但我不想对最终用户产生任何影响,假设最终用户已经接受了第三方cookie,那么实现这一点的最佳方式应该是什么?

如果您想在IE 11中启用CORS请求,您的服务器必须将以下标头附加到所有响应:

Access-Control-Allow-Origin: http://example.com
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: ACL, CANCELUPLOAD, CHECKIN, CHECKOUT, COPY, DELETE, GET, HEAD, LOCK, MKCALENDAR, MKCOL, MOVE, OPTIONS, POST, PROPFIND, PROPPATCH, PUT, REPORT, SEARCH, UNCHECKOUT, UNLOCK, UPDATE, VERSION-CONTROL
Access-Control-Allow-Headers: Overwrite, Destination, Content-Type, Depth, User-Agent, Translate, Range, Content-Range, Timeout, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control, Location, Lock-Token, If
Access-Control-Expose-Headers: DAV, content-length, Allow

您也可以附加Access Control Max Age标头,指定飞行前请求将被缓存的秒数,这将减少请求量:

Access-Control-Max-Age: 3600

您可以参考此链接,了解如何为特定服务器实现CORS。

最新更新