【问题标题】:Safari not include COOKIE to second CORS requestSafari 不包括 COOKIE 到第二个 CORS 请求
【发布时间】:2020-08-06 17:55:17
【问题描述】:

我在https://somedomain.dev(角度)上有前端,在https://api.somedomain.dev 上有api(所以我有相同的域但不同的子域 - 这很重要,因为对于不同的整个域,Safari 将block 全部cookies)。我按以下顺序向 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 向每个 GET 请求添加 COOKIE)

所有请求详细信息(标头等):

问题:为什么 Safari 不将 cookie 添加到 buildings 请求以及如何强制 Safari(使用 javascript 或服务器代码)将 cookie 添加到所有请求(登录后)?

【问题讨论】:

  • 你在这两个请求上都使用withCredentials
  • @David - 是的 - 在所有请求上(我使用拦截器来做)

标签: javascript angular cookies cross-domain


【解决方案1】:

好的 - 在对请求进行了长时间分析之后,我终于发现了问题 - 在login 响应中,服务器在Set-Cookie 标头中设置了 cookie 生命周期

Max-Age: 43200;

这适用于 Chrome、Firefox 和 Edge - 但不适用于 Safari(可能 Safari 将其视为 1s cookie 生命周期,这就是为什么它只为第一个 GET 请求添加 cookie) - 所以我将其更改为

max-age=43200;

现在无处不在 :)

【讨论】:

    猜你喜欢
    • 2020-03-08
    • 2021-01-08
    • 2014-08-05
    • 2014-11-19
    • 2021-05-29
    • 2020-09-22
    • 2015-10-30
    • 2012-02-10
    相关资源
    最近更新 更多