这些都很好理解,毕竟浏览器是开放的,它会访问很多不同的网址,如果每个请求都将所有的 Cookie 信息都传递过去,基本上是不现实的。而这些配置参数,就是对 Cookie 增加一些附加的设置,进行一些简单的限制和过滤,在减少传输量的同时也保证了安全。
Domain 这个参数可以限制只在此域名下的请求,才传递该 Cookie,其他的不传递。
Cookie 其实还支持其他的一些参数配置,打开 Chrome 的调试模式,在 Application 中就可以看到当前页面的 Cookie 信息。
下面以一篇微信文章页面所存储的 Cookie 为例。
这个表中,就是当前存储的所有 Cookie 信息,而表头,则是 Chrome 支持的 Cookie 信息。
下面我们分别来介绍它们。
Name:Value :Cookie 存储的数据就是一个 Key-Value 的键值对,所以这两个参数没什么争议,就是数据的 Key 和 Value。
Domain:Cookie 的域,限制请求头传输的域。
Path:域中与 Cookie 相关的路径前缀。
Expires/Max-Age:过期时间或者超时间隔。
http:此属性为 True,表示只会在 HTTP 请求头中携带此 Cookie 信息,而无法通过 document.cookie 来访问此 Cookie。
Secure:安全,是否只有在使用 SSL 连接时才发送这个 Cookie。
其实都很好理解,就不展开讲解了。
3.3 Set-Cookie2 和 Cookie2有些资料里会提到 Set-Cookie2 和 Cookie2 ,这些都是历史遗留问题,当初想对 Cookie 再进行一些功能上的扩展,但并未得到广泛的实施,现在已经弃用了。
大家了解一下即可,有兴趣可以参考 RFC 6265。
RFC 6265:
https://tools.ietf.org/html/rfc6265
3.4 浏览器对 Cookie 的限制大部分时候我们聊到 Cookie 都在说的是服务器和浏览器进行通信时候,而不同的浏览器对 Cookie 存储的限制是不一样的。例如:单个域名可存储的 Cookie 数量、Cookie 大小等。
我简单找了一些资料,来说明不同浏览器对 Cookie 的支持情况。
这些数据我没有验证过,但是也能说明不同浏览器对 Cookie 的支持情况。在进行页面 Cookie 操作的时候,应该尽量保证 Cookie 的个数小于 20 个,总大小小于 4KB,这是一个安全且保险的范围。
四、Cookie的查缺补漏 4.1 Cookie 安全前面配置 Cookie 参数的时候,有两个参数:http 和 secure 属性,它们就在一定程度上保证了安全。
1. http 属性
设置了 http 属性,标识它是一个 “HttpOnly” 的,那么通过一些脚本程序(例如 JS的 document.cookie)将无法读取到这个 Cookie 信息,它只会出现在请求的报文头内。
2. secure 属性
secure 属性强制该 Cookie 只有在 SSL 的环境下才会想服务器传输,相对也保证了传输的安全。
4.2 Cookie 不支持跨域Cookie 本身是不支持跨域的,一定程度也保证了 Cookie 的安全,如果非要跨域其实作为前端基本上能做的很少,大部分都需要服务端的二次配合。
例如:nginx 反向代理、Jsonp、nodejs 的 superagent、iframe 等方法。
有兴趣再单独了解就好了。
五、Cookie 小结HTTP 中的 Cookie 知识点,基本上都已经讲解清楚了,我们再次总结一下关键知识点。
1. Cookie 主要是为了解决 HTTP 协议无状态的问题。
2. 服务端通过 Set-Cookie 响应头来向客户端设置 Cookie。
3. 客户端通过 Cookie 请求头向服务端发送之前存储的 Cookie 数据。
4. Cookie 依据过期时间进行区分,将类型分为:临时 Cookie 和 持久 Cookie。
5. Cookie 可以通过配置不同的参数,进行限制,例如过期时间、支持的域名、是否安全(secure)等。
6. Cookie 不支持跨域,跨域还需要其他的方式绕开来实现。
7. Cookie 只能做到相对的安全,任何事情没有绝对的安全。
参考:
Cookie 个数限制及大小:https://my.oschina.net/gaollg/blog/71299。
RFC 6265:https://tools.ietf.org/html/rfc6265
cookie 小结:
「」
分类:
Android技术点:
相关文章:
『动善时』JMeter基础 — 21、HTTP Cookie管理器的使用 2021-05-25
使用 nodejs 中的 http 模块实现几个超实用的工具 2021-04-14
聊聊 HTTP 常见的请求方式 2020-12-23
图解 HTTP 的缓存机制 | 实用 HTTP 2018-06-25