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

时间:2016-08-18 21:23:09

标签: javascript ajax cookies fetch

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

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

我已经通过LiveHeaders和Chrome网络检查员检查了请求和响应标头,但没有区别。

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

1 个答案:

答案 0 :(得分:19)

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

来自https://fetch.spec.whatwg.org/

的规范
  

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

     

请求凭据模式控制凭证流程   取。当请求的模式是"导航"时,其凭证模式是   假设是"包括"和fetch目前不占其他   值。如果HTML在此处更改,则此标准将需要相应的   变化。

     

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