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(含授权令牌。JWT
  • GET /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”标头(第一个请求有效,第二个请求无效)[重复]

导航到第二页后 Cookie 值为空

JMeter - 将值从第一个 JDBC 请求传递到第二个 JDBC 请求

为什么ie8 CORS / XDomainRequest不发送cookie?