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

为何浏览器将localhost子域间请求标记为sec-fetch-site:cross-site?

问题解答

核心原因:localhost 是浏览器特殊处理的顶级域

你遇到的问题根源在于浏览器对 localhost 这个特殊域的处理逻辑——它的子域名不会被识别为同一站点(same-site)的一部分。

虽然文档里描述same-site包含“相同协议、域名和/或子域名”,但这个规则仅适用于常规的公共顶级域(比如 .com、.org)。对于 localhost,浏览器会将每个子域(如 fe.localhost 和 be.localhost)视为完全独立的站点,因此跨子域的请求会被标记为 cross-site。

补充验证与说明

你可以通过浏览器开发者工具的「网络」面板查看请求头中的 Sec-Fetch-Site 字段,确认确实被标记为 cross-site。这种处理是浏览器的安全策略之一,目的是在本地开发场景下隔离不同的服务实例,避免潜在的跨站风险。

如果需要让这两个子域被视为same-site,你可以修改本地DNS配置(比如使用自定义的顶级域,如 .local),或者在浏览器的测试模式下调整相关安全设置,但前者是更通用的解决方案。

关于你的后端代码

你的PHP后端代码中已经设置了基础的CORS响应头(Access-Control-Allow-Headers),但如果要处理跨站请求的Cookie或会话(比如你的登录逻辑用到了session_start()),还需要补充设置 Access-Control-Allow-Origin 为前端域名(https://fe.localhost),并添加 Access-Control-Allow-Credentials: true,同时前端请求时要设置 withCredentials: true(如果用的是fetch或axios),否则会话无法跨域共享。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 07:45:33