最近,Chrome改变了跨源请求是否附加cookie的政策。现在,跨源请求不会附加 cookie,除非。
SameSite
cookie属性是 Lax
或 None
并且该请求是由用户操作发起的,或SameSite
cookie属性是 None
和 Secure
cookie属性是 true
,这意味着跨源请求必须使用 https
方案。(以上并没有错,但略为简化。下面是 彻头彻尾.)
在我的开发环境中,我使用了一个工具来编译我的开发语言,并将更改的内容热加载到我的浏览器标签中。这个工具在自己的 port 上为前端代码提供服务,而后端则由一个单独的进程在单独的 port 上提供服务,因此我们要处理从浏览器到后端的跨源请求。当然,前台和后台都是从 localhost
有计划 http
. 而前台应用提出的许多请求并不是由用户操作发起的,却仍然需要Cookie来进行认证。
因此,在我的开发环境中,任何需要cookies的东西都无法工作。(是啊,花了不少时间才弄明白这个问题......)
我的问题是:我怎样才能绕过、绕过或禁用这些。SameSite
以一种简单的方式为我的开发环境添加cookie安全限制,而不会降低我在浏览其他网站时的安全性?
例如,如果有一种方法可以在我的开发环境中添加 localhost
在我的浏览器中,将其加入到一个白名单中,从而允许 SameSite=None
饼干,即使没有 Secure=true
属性。稍微差一点,但还是可以接受的,就是一个简单的方法来包装或代理我的 http://localhost:<port>
服务,从而可以通过 https
方案。或者还有另一种方法,使用一些晦涩的Cookie魔法。
如果你的所有开发环境都托管在 localhost
那么不同端口之间的请求,虽然是跨源的,但仍然算作同源。参见 https:/web.devsame-site-same-origin。
在你的开发环境中,你可以放弃 SameSite=None; Secure
全盘托出 SameSite=Lax
.
另外,可以看看为以下内容创建自签证书。localhost
或本地vms,以更好地匹配你的生产环境--虽然这稍微有点麻烦。