Javascript 设置自定义标头时,跨源jquery ajax请求中未发送cookie

Javascript 设置自定义标头时,跨源jquery ajax请求中未发送cookie,javascript,jquery,ajax,cors,Javascript,Jquery,Ajax,Cors,我们正在使用jQuery从主域向子域(跨源)发出ajax请求。我们已经设置了CORS,在我们尝试发送带有请求的自定义头之前,一切都在工作。如果在请求上设置了自定义标头,则会话cookie将不再随请求一起发送 Access-Control-Allow-Origin : http://example.com Access-Control-Allow-Credentials : true Access-Control-Allow-Headers : Origin, X-Requested-Wit

我们正在使用jQuery从主域向子域(跨源)发出ajax请求。我们已经设置了CORS,在我们尝试发送带有请求的自定义头之前,一切都在工作。如果在请求上设置了自定义标头,则会话cookie将不再随请求一起发送

 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
jQuery版本:2.1.4

 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
我们的原始域:

 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设置为子域使用,使用cookie选项中的
domain:.example.com

 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
随子域的响应一起发送的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随请求一起发送):

 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):

 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
有人知道第二个示例中jQuery/browser为什么不发送cookie吗

 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


另外,我知道有很多关于stackoverflow的jquery CORS问题。我已经广泛地查阅了它们,但找不到一个能够解决这个确切问题的方法我要求,如果您发现一个问题与此问题完全匹配,请仅将其标记为重复。谢谢。

因此,(正如@KevinB所建议的)这是我们服务器上处理飞行前选项的方式问题,与客户端无关。谢谢Kevin。

我不是Ajax专家,但是您是否尝试过在发送前使用
设置自定义标头而不是使用
标头
?通过设置自定义标头,您的请求将不仅仅是一个“简单”的请求,这意味着需要正确处理飞行前请求。您的服务器是否收到飞行前请求?飞行前请求不包含cookie。对于飞行前请求,请求方法将是
OPTIONS
,而不是
GET
。如果飞行前失败,实际请求将不会被发送。@M.Doye-谢谢,尝试过,但没有difference@KevinB-啊,对。我假设选项飞行前的事情已经发生在(工作)第一个案例中。那听起来像是头号嫌疑犯。谢谢我会调查并报告。@UpTheCreek它可能是,取决于浏览器。在这种情况下,一些浏览器对规范的解释似乎与其他浏览器不同。浏览器控制台(或fiddler2)将阐明这一点。
 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