You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何同域名子域请求的Sec-Fetch-Site被标记为cross-site?

问题原因及解决办法

核心原因:Heroku域名属于公共后缀列表

浏览器判断same-site的依据并非简单的父域名相同,而是公共后缀列表(Public Suffix List)。herokuapp.com被列入了这个列表,浏览器会将其视为「顶级公共后缀」,而非普通二级域名。这直接导致:

  • a.herokuapp.com和b.herokuapp.com被判定为完全独立的站点
  • 跨二者的请求自然会被标记为cross-site

验证方式

你可以通过以下方式确认这一点:

  • 在Chrome地址栏输入chrome://settings/cookies/detail?site=herokuapp.com,查看Cookie域的处理逻辑,会发现浏览器将herokuapp.com当作顶级域对待
  • 浏览器内置的公共后缀列表中确实包含herokuapp.com条目

解决办法

如果需要让两个应用被判定为same-site,唯一可行的方案是使用自定义域名:

  • 注册自己的顶级域名(比如example.com)
  • 将两个应用分别配置为a.example.com和b.example.com
  • 此时浏览器会将example.com视为父域,跨子域的请求会被标记为same-site

附:你提供的请求头信息

…
Host: b.herokuapp.com
Origin: https://a.herokuapp.com
Referer: https://a.herokuapp.com/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: cross-site
…

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:15:39