Cookie是什么?
RFC6265,HTTP State Management Mechanism
保存在客户端、由浏览器维护、表示应用状态的HTTP头部:
- 存放在浏览器中
- 服务器生成Cookie在响应中通过Set-Cookie头部告知客户端
- 客户端得到Cookie后,在同域下,后续请求都会自动将Cookie携带至请求中
cookie使用限制
浏览器有很多厂商,每种浏览器又有很多版本,因此RFC会对浏览器是有个要求的:
RFC规范对浏览器使用Cookie的要求
- 每条Cookie的长度(包括name、value以及描述的属性等总长度)至少要达到4kb
- 每个域名下至少支持50个cookie
- 一个浏览器至少要支持3000个cookie
代理服务器传递cookie时会有限制,因为cookie是放在http头部的,很多代理服务器会限制http头部大小,4k、8k、Nginx默认32k
方案:
源服务器生成cookie时限制大小
token代替cookie,即JWT形式
cookie在协议设计上的问题
- cookie会被附加在同域下的每个http请求中,所以无形中增加了流量。
- 由于在http请求中的cookie是明文传递的,所以会有安全性问题(除非用HTTPS协议)