Apollo Client HttpLink子域名场景下same-origin配置不携带Cookie问题问询
问题根因
credentials: 'same-origin'配置不符合跨子域名场景的要求:
- 浏览器同源策略的判定标准为协议、完整域名、端口三者完全一致,
auth.example.com和api.example.com属于不同源,哪怕共享顶级域名也不符合same-origin的触发条件,因此浏览器不会主动携带Cookie。
修复方案
将credentials配置改为include即可,修改后的配置参考:
const hasuraHttpLink = createHttpLink({ uri: 'https://api.example.com', // 建议补全请求协议,避免相对路径解析异常 credentials: 'include' });
WebSocketLink正常的原因
WebSocket握手请求默认会携带符合Domain作用域的Cookie,不受HttpLink的credentials配置约束,只要Cookie属性、CORS配置符合要求就能正常发送,因此不会触发该问题。
额外检查项(可选)
如果修改配置后仍然有问题,可以核对两点:
- 父级域名Cookie的
SameSite属性:如果设置为Strict可能会阻止跨子域名发送,调整为Lax即可;如果是跨站点场景需要设置为None,同时必须开启Secure属性 - CORS配置的
Access-Control-Allow-Origin不能为通配符*,必须明确指定业务的请求源域名
内容的提问来源于stack exchange,提问作者stoniemahonie
相关产品推荐
相关产品推荐

