SameSite=Strict Cookie在跨子域fetch请求中未携带的原因排查
问题原因及解决办法
核心原因
- SameSite=Strict 的限制:该属性的 Cookie 仅会在同一站点的顶级导航场景(比如直接访问页面、点击同站点链接跳转)中被携带,通过
fetch发起的跨子域 AJAX 请求属于非顶级导航的跨源请求,Strict 规则会阻止 Cookie 附加。 - fetch 默认不携带跨源凭证:
fetchAPI 默认不会在跨源请求中携带 Cookie,即使 Cookie 的域配置正确,也需要显式开启凭证携带设置。
解决方法
- 调整 Cookie 的 SameSite 属性
若业务场景允许,可将 Cookie 的 SameSite 修改为Lax(支持 same-site 下的 AJAX 请求携带 Cookie),若需要跨完全不同的站点则改为None(需同时搭配Secure属性,仅在 HTTPS 环境生效)。 - 配置 fetch 的凭证参数
发起请求时添加credentials: 'include',确保跨源请求携带 Cookie:fetch("https://auth.example.com/whoami", { credentials: 'include' })
内容的提问来源于stack exchange,提问作者v-kessler
相关产品推荐
相关产品推荐

