我们正在使用jQuery从我们的主域到子域(跨域)发出ajax请求.我们已经设置了CORS,一切正常,直到我们尝试使用请求发送自定义标头.如果在请求中设置了自定义标头,那么我们的会话cookie将不再随请求一起发送.
jQuery版本:2.1.4
我们的起源域名:http://example.com
我们的会话cookie设置为子域名使用,在cookie选项中使用domain:.example.com.
从子域响应发送的CORS标头:
Access-Control-Allow-Origin : http://example.com
Access-Control-Allow-Credentials : true
Access-Control-Allow-Headers : Origin, X-Requested-With, Content-Type, Accept, X-OurCustomHeader
此请求正常(会话cookie随请求一起发送):
jQuery.ajax({
url: 'http://sub.example.com/someajaxroute',
xhrFields: { withCredentials: true },
}
此请求(带有自定义标头)不起作用(不发送会话cookie):
jQuery.ajax({
url: 'http://sub.example.com/someajaxroute',
xhrFields: { withCredentials: true },
headers : { 'X-OurCustomHeader' : 'xxx'}
}
有谁知道为什么jQuery /浏览器没有在第二个例子中发送cookie?
PS.我知道stackoverflow上有很多关于jquery CORS的问题.我已经广泛地浏览了它们,找不到解决这个问题的方法.如果您发现与此确切问题相符的问题,请您将其标记为重复.谢谢.
最佳答案 事实证明(正如@KevinB建议的那样)这是在我们的服务器上处理预检OPTIONS的方式的问题,而与客户端无关.谢谢凯文.