Safari 不包含 COOKIE 到第二个 CORS 请求
Safari not include COOKIE to second CORS request
我在 https://somedomain.dev
(angular) 上有前端,在 https://api.somedomain.dev
上有 api (所以我有相同的域但不同的子域——这很重要,因为对于不同的整体Safari 将 block all )。我按以下顺序向 API 发送了 3 个请求
POST /api/user/login
- 在响应服务器设置 HttpOnly COOKIE(带有授权令牌:JWT
GET /api/user/profile
- 获取用户配置文件(浏览器应添加 COOKIE 请求)
GET /api/buildings
- 获取建筑物(浏览器应添加 COOKIE 请求)
问题:Safari 仅为 GET profile
添加 cookie,而不向 GET buildings
添加 cookie(Chrome,Firefox 和 Edge 添加 COOKIE每个 GET 请求)
所有请求详细信息(headers 等):
- Chrome v.81.0 : login, profile and building
- Safari 13.1 版:login, profile and building
- angular:每个 get 请求都带有
withCredential: true
标志(当然这在 Chrome 中有效)
问题:为什么 Safari 不向 buildings
请求添加 cookie 以及如何强制 Safari(使用 javascript 或服务器代码)添加 cookie所有请求(登录后)?
好的 - 经过长时间的分析请求,我终于发现了问题 - 在 login
响应中,服务器在 Set-Cookie
header 中设置了 cookie 生命周期
Max-Age: 43200;
这适用于 Chrome、Firefox 和 Edge——但不适用于 Safari(可能 Safari 将其视为 1s cookie life-time,这就是为什么它只为第一个 GET 请求添加 cookie)——所以我改成
max-age=43200;
现在无处不在:)
我在 https://somedomain.dev
(angular) 上有前端,在 https://api.somedomain.dev
上有 api (所以我有相同的域但不同的子域——这很重要,因为对于不同的整体Safari 将 block all
POST /api/user/login
- 在响应服务器设置 HttpOnly COOKIE(带有授权令牌:JWTGET /api/user/profile
- 获取用户配置文件(浏览器应添加 COOKIE 请求)GET /api/buildings
- 获取建筑物(浏览器应添加 COOKIE 请求)
问题:Safari 仅为 GET profile
添加 cookie,而不向 GET buildings
添加 cookie(Chrome,Firefox 和 Edge 添加 COOKIE每个 GET 请求)
所有请求详细信息(headers 等):
- Chrome v.81.0 : login, profile and building
- Safari 13.1 版:login, profile and building
- angular:每个 get 请求都带有
withCredential: true
标志(当然这在 Chrome 中有效)
问题:为什么 Safari 不向 buildings
请求添加 cookie 以及如何强制 Safari(使用 javascript 或服务器代码)添加 cookie所有请求(登录后)?
好的 - 经过长时间的分析请求,我终于发现了问题 - 在 login
响应中,服务器在 Set-Cookie
header 中设置了 cookie 生命周期
Max-Age: 43200;
这适用于 Chrome、Firefox 和 Edge——但不适用于 Safari(可能 Safari 将其视为 1s cookie life-time,这就是为什么它只为第一个 GET 请求添加 cookie)——所以我改成
max-age=43200;
现在无处不在:)