You need to enable JavaScript to run this app. 不使用第三方包设置Cookie后其他请求头未携带Cookie问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

不使用第三方包设置Cookie后其他请求头未携带Cookie问题咨询

问题根因
  • 第一个Cookie setFromServer=1 未指定path属性,浏览器默认会将该Cookie的作用域限定为当前接口路径/set-cookies的同级及子路径,只有路径匹配的请求才会携带该Cookie
  • 跨域场景下前端请求未开启携带凭证配置,即使服务端开启了Access-Control-Allow-Credentials,浏览器也不会自动在后续请求中携带服务端下发的Cookie
  • 仅在/set-cookies接口内配置CORS头,未适配OPTIONS预检请求:跨域POST请求前浏览器会先发送OPTIONS预检请求,若预检请求未返回合规的CORS头,后续正式请求的Cookie携带逻辑会被浏览器拦截
  • 未适配浏览器默认的SameSite Cookie策略,跨站场景下Cookie会被浏览器默认拦截
修复步骤
  1. 补全Cookie的公共属性,将两个Cookie的配置修改为:
["setFromServer=1;Max-Age=3600; path=/;", "jscantsee=1; Max-Age=3600; path=/; httponly;"]

如果是跨站部署,还需要额外增加SameSite=None; Secure属性,且确保服务使用HTTPS协议:

["setFromServer=1;Max-Age=3600; path=/; SameSite=None; Secure;", "jscantsee=1; Max-Age=3600; path=/; httponly; SameSite=None; Secure;"]
  1. 前端请求开启携带凭证配置:
  • 使用XMLHttpRequest:添加配置xhr.withCredentials = true
  • 使用fetch:请求参数添加credentials: 'include'
  • 使用axios:全局配置axios.defaults.withCredentials = true,或单次请求添加withCredentials: true参数
  1. 将CORS配置提取到全局中间件,不要仅在/set-cookies接口内配置,确保OPTIONS预检请求也能返回正确的CORS响应头,避免预检不通过导致Cookie被拦截。

注意:你设置的httponly属性的Cookie本身就无法通过前端JS读取,属于正常安全策略,只要浏览器在发送请求时自动携带该Cookie即为配置生效。

内容的提问来源于stack exchange,提问作者lezabiey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 15:36:03