一、Cookie
1、Secure
和HttpOnly
标记
Secure
:标记为Secure
的Cookie
,只应通过被HTTPS
协议加密过的请求发送给服务端HttpOnly
:标记为HttpOnly
的Cookie
,JavaScript
无法访问带有HttpOnly
标记的Cookie
,它们只应该发送给服务端,避免跨域脚本XSS
2、SameSite
Cookies
SameSite
Cookie允许服务器要求某个cookie在跨站请求时不会被发送,从而可以阻止跨站请求伪造攻击CSRF
。但目前SameSite
Cookie还处于实验阶段,并不是所有浏览器都支持。
3、跟localStorage、sessionStorage 相比
特性 | Cookie | localStorage | sessionStorage |
---|---|---|---|
生命期 | 可设置失效时间,默认为session cookie ;session cookie 无法保证会话结束后,一定会被删除 |
除非被清除,否则永久保存 | 仅在当前会话下有效,关闭会话(标签页)后被清除;如果标签页由其他页面打开,当前的sessionStorage 会根据前一个页面的sessionStorage 数据进行初始化 |
大小 | 4K左右 | 一般为5MB | 一般为5MB |
通信 | 每次都会携带在HTTP头中 | 仅在客户端中保存,不参与和服务器的通信 | 仅在客户端中保存,不参与和服务器的通信 |
作用域 | 通过domain、path 来确定 |
通过协议、主机名、端口 来确定 |
通过协议、主机名、端口、标签 来确定。不同标签页面,sessionStorage 数据无法共享 |
注:cookie
通过【name,doamin,path
】来确定其唯一性,倘若三个属性都一样方为同一个cookie
4、读写cookie
1 | // 读取所有可从此位置访问的Cookie |
注:以下可选的cookie属性值可以跟在键值对后,用来具体化对cookie的设定/更新,使用分号以作分隔。在浏览器控制台中,document.cookie
值,对应当前资源的可见cookie值。
;path=path
如果没有定义,默认为当前文档位置的路径;domain=domain
如果没有定义,默认为当前文档位置的路径的域名部分;max-age=max-age-in-seconds
;expires=date-in-GMTString-format
如果没有定义,cookie会在对话结束时过期;secure
只通过https
协议传输
5、cookie匹配规则
浏览器在加载静态资源或者发出ajax请求时,会根据url
中的域名与路径,对每个cookie的domain属性
和path属性
进行验证,存在多个同名cookie时,按一定排序都带上。
请求http://news.example.com/news/hot
时, 带上的cookie要满足:
domain属性
是news.example.com
,及其上级域名path属性
是/news/hot
,及其上级路径
6、cookie排序原则
- 具有更长path的cookie更靠前
- 如果path长度相等,更早创建的cookie更靠前
二、Referer
Referer
表示请求页面是通过此来源页面里的链接进入的,在以下两种情况下,Referer
不会被发送:
- 来源页面采用的协议为表示本地文件的 “file” 或者 “data” URI
- 当前请求页面采用的是非安全协议,而来源页面采用的是安全协议(HTTPS)
注:
- 在浏览器中,
Referer
属性只读不写。但可以通过代理服务进行修改 - 如果需要通过 document.referrer 采集页面访问来源,最好不要使用 JS 跳转或打开新窗口,也不要使用 meta 跳转