1
ShuWei 36 天前
这个问题的原因在于浏览器的跨域策略和 credentials 处理。具体来说:
1. 同源策略 (Same-Origin Policy): 当 a.zzz.com 请求 b.zzz.com 时,这两个域名属于同一个主域 (zzz.com),只是子域不同,因此浏览器通常允许共享 cookie 和认证信息(如果服务器允许),而 credentials: 'include' 会确保带上用户的身份认证信息(比如 cookie 或 HTTP 认证头)。 2. 跨域请求 (CORS): 当从 xxx.com 请求 b.zzz.com 时,这属于不同的主域,跨域请求的处理就不同了。在这种情况下,即使你设置了 Access-Control-Allow-Origin 来允许跨域,浏览器仍然不会自动携带 cookie 或其他认证信息,除非服务器明确允许跨域携带身份认证信息。 3. Access-Control-Allow-Credentials: 你提到已经设置了 access-control ,但是要确保你已经正确设置了 Access-Control-Allow-Credentials: true 。这是允许浏览器在跨域请求中携带认证信息的关键标头。如果没有这个标头,浏览器即使带上了 credentials: 'include' 也不会发送或接收身份验证的 cookie 。 4. Access-Control-Allow-Origin 的限制: 当你使用 Access-Control-Allow-Credentials: true 时,Access-Control-Allow-Origin 的值不能为通配符 *,而必须是明确的域名(如 https://xxx.com 或 https://b.zzz.com )。浏览器只在特定情况下允许带上身份信息,不能与允许所有来源的设置结合使用。 解决方案: • 确保你的服务器在 b.zzz.com 上配置了 Access-Control-Allow-Credentials: true 。 • Access-Control-Allow-Origin 必须明确指定为请求的域名,如 https://xxx.com ,不能是 *。 • 在客户端的请求中使用 credentials: 'include' 以确保跨域请求中包含身份认证信息。 如果你的配置没有问题,检查一下浏览器的开发者工具中的网络请求日志,看看请求和响应的 Access-Control 相关头部是否都符合要求。 |
2
lisongeee 36 天前
感觉楼上的 AI 回复和 OP 主题描述里的《问了几次 GPT4 和 Claude 都在扯别的,就是不提重点,也没查到文档》没啥区别
建议这种情况 OP 最好给出完整的 HTTP 报文日志,懂的人一看报文就清楚了 另外感觉每天都能看到这种简单描述但是不给详细日志的问题,然后楼下一堆 AI 回复和其他人靠猜的回复 |
3
drymonfidelia OP @Livid #1 粘贴 AI 无关回复
|
4
drymonfidelia OP |
5
Oktfolio 36 天前
Chrome:这都是为你们安全着想啊
Chrome 80 默认 SameSite 为 Lax ,SameSite=None 要求 Secure Chrome 91 默认阻止第三方 Cookie 淘宝现在好像是登录后给几个域名都写了 Cookie ,之前有一段时间是需要跳转的。具体怎么实现的,暂时还没去了解。 |
6
Livid MOD @drymonfidelia 谢谢,1 楼的账号已经被彻底 ban 。
|
7
Charrlles 36 天前 via iPhone
带不带 Cookie 和 cross origin access control 没什么关系,和 cookie 自己的 domain 和 path 有关
|
8
lcy630409 35 天前
不要质疑大厂技术的选型 肯定是有原因的,
如果你们站点很多,干脆专门做一个会员中心,像 dz 一样,还是得搞异步轮询登录 |
9
hzzhzzdogee 34 天前
cors 和 cookie 是两个东西
|
10
cat1879 34 天前
这不就是跨域的问题吗
|