HTTP cookie
通常也叫作cookie
,最初用于在客户端存储会话信息。这个规范要求服务器在响应HTTP
请求时,通过发送Set-Cookie HTTP
头部包含会话信息。
这些发送回服务器的额外信息可用于唯一标识发送请求的客户端。
1. 限制
cookie
是与特定域绑定的。设置cookie
后,它会与请求一起发送到创建它的域。这个限制能保证cookie
中存储的信息只对被认可的接收者开放,不被其他域访问。
因为cookie
存储在客户端机器上,所以为保证它不会被恶意利用,浏览器会施加限制。同时,cookie
也不会占用太多磁盘空间。
只要遵守以下大致的限制,就不会在任何浏览器中碰到问题:
- 不超过 300 个
cookie
- 每个
cookie
不超过 4096 字节 - 每个域不超过 20 个
cookie
- 每个域不超过 81920 字节
如果cookie
总数超过了单个域的上限,浏览器就会删除之前设置的cookie
。
2. 构成
cookie
在浏览器中是由以下参数构成的:
-
名称
cookie
名称不区分大小写。必须经过URL
编码。 -
值
必须经过
URL
编码。 -
域
cookie
有效的域。 -
路径
请求
URL
中包含这个路径才会把cookie
发送到服务器。 -
过期时间
默认情况下, 浏览器会话结束后会删除所有
cookie
。不过,也可以设置删除cookie
的时间。把过期时间设置为过去的时间会立即删除cookie
。 -
安全标志
设置之后,只在使用
SSL
安全连接的情况下才会把cookie
发送到服务器。
但是,域、路径、过期时间和安全标志用于告诉浏览器什么情况下应该在请求中包含cookie
。 这些参数并不会随请求发送给服务器,实际发送的只有cookie
的名称、值。
3. 子cookie
为绕过浏览器对每个域cookie
数的限制,有些开发者提出了子cookie
的概念。
子cookie
是使用cookie
的值在单个cookie
中存储多个名/值
对。
4. 注意事项
因为所有cookie
都会作为请求头部由浏览器发送给服务器,所以在cookie
中保存大量信息可能会影响特定域浏览器请求的性能。保存的cookie
越大,请求完成的时间就越长。
另外,不要在cookie
中存储重要或敏感的信息。
欢迎在我的博客上访问:
https://lzxjack.top/