Why is a set-cookie header being ignored by browser and the cookies not saved from an Ajax call using fetch?
出于某种原因,我的浏览器(我尝试了几个)不设置cookie,即使服务器返回有效的set-cookie响应,当使用fetch api通过Ajax进行GET调用来发出请求时
如果我通过将URL放在浏览器中进行相同的GET调用,则浏览器会尊重(相同的)set-cookie响应头并保存cookie。
我通过LiveHeaders和Chrome网络检查器检查了请求和响应标头,没有区别。
编辑:澄清一下,这不是ajax向服务器发送cookie的问题。 这是一个问题,当一个响应返回时,有效的set-cookies标题(根据文档应该遵守是否ajax),浏览器根本不保存cookie。
在经过多次打击之后,我通过将请求的"凭证"属性设置为"包含"来解决了这个问题。 我的印象是,这只能控制在获取请求时向服务器发送cookie,但显然,至少在我正在使用的实现中,如果没有设置它也意味着如果从以下方式发送回来,cookie将不会被保存 服务器。
来自https://fetch.spec.whatwg.org/上的规范
A request has an associated credentials mode, which is"omit",
"same-origin", or"include". Unless stated otherwise, it is"omit".Request's credentials mode controls the flow of credentials during a
fetch. When request's mode is"navigate", its credentials mode is
assumed to be"include" and fetch does not currently account for other
values. If HTML changes here, this standard will need corresponding
changes.Credentials are HTTP cookies, TLS client certificates, and authentication entries.