Safari不包含COOKIE到第二个CORS请求中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Safari不包含COOKIE到第二个CORS请求中相关的知识,希望对你有一定的参考价值。
我的前端在 https://somedomain.dev
(angular)和api在 https://api.somedomain.dev
(所以我有相同的域名,但不同的子域名--这一点很重要,因为对于不同的整个域名,Safari将 阻止 都 饼干). 我按照以下顺序向API发送了3个请求
POST /api/user/login
- 在响应服务器设置 仅限HttpOnly COOKIE(含授权令牌。JWTGET /api/user/profile
- 获取用户资料(浏览器应在请求中添加COOKIE)。GET /api/buildings
- 获取建筑物(浏览器应添加COOKIE请求)。
问题: Safari只添加cookie GET profile
而不是将cookie添加到 GET buildings
(Chrome、Firefox和Edge在每个GET请求中添加COOKIE)
所有请求的细节(标题等)。
问题: 为什么Safari不添加cookie到 buildings
如何强制Safari(使用javascript或服务器代码)为所有请求(登录后)添加cookie?
好的--经过长时间的分析请求,我终于发现了问题所在--在 login
中设置的服务器响应。Set-Cookie
头部的cookie寿命由
Max-Age: 43200;
这在Chrome、Firefox和Edge上可以工作--但在Safari上不行(可能Safari将其视为1s的cookie寿命,这就是为什么它只为第一次GET请求添加cookie)--所以我将其改为
max-age=43200;
现在到处都能用:)
以上是关于Safari不包含COOKIE到第二个CORS请求中的主要内容,如果未能解决你的问题,请参考以下文章
Apple Safari 仍未设置第三方域 CORS cookie?
Safari 不使用 JS Fetch API 设置 CORS cookie
代理服务器 - 被 CORS 策略阻止:不存在“Access-Control-Allow-Origin”标头(第一个请求有效,第二个请求无效)[重复]