提起cookie最基础的几个属性肯定是可以请求自动携带、大小、本地缓存、后端自动注入、携带cookie会引起跨域。而有几个不常用的却很少提及。
crossorigin
同源策略会引起跨域,而link、script、img、video、audio等几个标签不会引起跨域,而且,这些标签可以设置允许携带cookie的属性:
- anonymous:它有一个默认值。它定义了一个 CORS 请求,该请求将在不传递凭证信息的情况下发送。
- use-credentials:将发送带有凭据、cookie 和证书的 cross-origin 请求。
一般来说不用设置,不会携带,如果需要的话可以直接设置,就是没试过设置了允许携带是不是就会出现跨域了。
SameSite cookies
之前控制台经常看见这个属性,当时都没关注过,主要是应对跨站的问题。我们知道有个攻击叫做跨站请求伪造CSRF,设置这个就可以避免出现。
同站的定义是:eTLD+1相同即可。a.wade.com:80,wade.com就是eTLD+1。
比如下面的地址跟a.wade.com:80做比较:
- b.wade.com:80,同站,二级域名不同
- a.wade.com:80,同站,协议不同
- a.wade.com:443,同站,端口不同
- a.b.com:80,跨站,域不同
这就尴尬了,跨站请求伪造的条件就太容易形成了,所以chrome升级到51之后新增了SameSite属性,加强了CSRF攻击和用户追踪,有三个属性:
- Strict:完全禁止第三方 Cookie,跨站点时,任何情况下都不会发送 Cookie。
- Lax:允许部分第三方请求携带 Cookie。链接,预加载请求,GET 表单,Ajax、iframe、img都不允许携带
- None:都可以携带,但是要设置Secure,只能是https协议下生效。
现在默认的SameSite是Lax,一些旧网站控制台会有警告也是因为新浏览器导致的:
A parser-blocking, cross site (i.e. different eTLD+1) script
A cookie associated with a cross-site resource at was set without the SameSite
attribute.
欢迎关注个人订阅号 coding个人笔记
本网站是一个以CSS、JavaScript、Vue、HTML为核心的前端开发技术网站。我们致力于为广大前端开发者提供专业、全面、实用的前端开发知识和技术支持。 在本网站中,您可以学习到最新的前端开发技术,了解前端开发的最新趋势和最佳实践。我们提供丰富的教程和案例,让您可以快速掌握前端开发的核心技术和流程。 本网站还提供一系列实用的工具和插件,帮助您更加高效地进行前端开发工作。我们提供的工具和插件都经过精心设计和优化,可以帮助您节省时间和精力,提升开发效率。 除此之外,本网站还拥有一个活跃的社区,您可以在社区中与其他前端开发者交流技术、分享经验、解决问题。我们相信,社区的力量可以帮助您更好地成长和进步。 在本网站中,您可以找到您需要的一切前端开发资源,让您成为一名更加优秀的前端开发者。欢迎您加入我们的大家庭,一起探索前端开发的无限可能!