为什么浏览器会忽略set-cookie标头,并且使用fetch不会从Ajax调用中保存cookie?

Pet*_*ter 20 javascript cookies ajax fetch

出于某种原因,我的浏览器(我尝试了几个)不设置cookie,即使服务器返回有效的set-cookie响应,当使用fetch api 通过Ajax进行GET调用来发出请求时

如果我通过将URL放在浏览器中进行相同的GET调用,则浏览器会尊重(相同的)set-cookie响应头并保存cookie.

我通过LiveHeaders和Chrome网络检查器检查了请求和响应标头,没有区别.

编辑:澄清一下,这不是ajax向服务器发送cookie的问题.这是一个问题,当一个响应返回时,有效的set-cookies标题(根据文档应该遵守是否ajax),浏览器根本不保存cookie.

Pet*_*ter 21

在经过多次打击之后,我通过将请求的"凭证"属性设置为"包含"来解决了这个问题.我的印象是,这只控制了在获取请求时向服务器发送cookie,但显然,至少在我正在使用的实现中,如果没有设置它也意味着如果从它们发回的cookie将不会保存服务器.

来自https://fetch.spec.whatwg.org/上的规范

请求具有关联的凭证模式,即"省略","同源"或"包括".除非另有说明,否则为"省略".

请求的凭据模式控制获取期间的凭据流.当请求的模式为"导航"时,其凭证模式被假定为"包含",而获取当前不会考虑其他值.如果HTML在此处更改,则此标准将需要相应的更改.

凭据是HTTP cookie,TLS客户端证书和身份验证条目.