再好好聊聊 HTTP 里的 Cookie | 实用 HTTP (2)

这些都很好理解,毕竟浏览器是开放的,它会访问很多不同的网址,如果每个请求都将所有的 Cookie 信息都传递过去,基本上是不现实的。而这些配置参数,就是对 Cookie 增加一些附加的设置,进行一些简单的限制和过滤,在减少传输量的同时也保证了安全。

Domain 这个参数可以限制只在此域名下的请求,才传递该 Cookie,其他的不传递。

Cookie 其实还支持其他的一些参数配置,打开 Chrome 的调试模式,在 Application 中就可以看到当前页面的 Cookie 信息。

下面以一篇微信文章页面所存储的 Cookie 为例。

再好好聊聊 HTTP 里的 Cookie | 实用 HTTP

这个表中,就是当前存储的所有 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 的支持情况。

再好好聊聊 HTTP 里的 Cookie | 实用 HTTP

这些数据我没有验证过,但是也能说明不同浏览器对 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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zydpyj.html