当前浏览器的最大Cookie大小(2018年)

14

来自 Django 文档:

RFC 2109 和 RFC 6265 都指出用户代理应支持至少 4096 字节的 Cookie。对于许多浏览器,这也是最大尺寸。

来源:https://docs.djangoproject.com/en/2.1/ref/request-response/

这个规定今天依然有效吗?

当前浏览器的最大 Cookie 尺寸是多少?


@HansPassant非常感谢您提供的浏览器Cookie限制的规范列表。 - guettli
3个回答

16

RFC6265(2011年4月)中的Cookie规范定义是当前的RFC,并且今天所有主要浏览器(IE,Chrome,Opera,Firefox)都支持它。

  • 每个Cookie至少为4096字节(由所有Cookie名称、值和属性的总和测量)。

  • 每个域名至少有50个Cookie,前提是它们不超过上述限制。

  • 总计至少3000个Cookie。

因此,所有现代浏览器至少支持这些限制。任何其他限制值都是冒险。

有关更多详细信息,请参见https://datatracker.ietf.org/doc/rfc6265/中的6.1.限制章节。


3
请注意,这并不意味着浏览器支持每个域名的“50个cookie * 4096字节= = 204,800字节= = 204KiB”。我发现Safari和Chrome会在一个域名的总数据超过5-8KB时开始拒绝cookie。 - Dai
1
嗨@Dai,我不知道Safari的情况,但在Chrome中,每个域的大小限制确实是204,800字节。从我的测试中,该大小是通过将主机名+ cookiepath + cookiename +未加密cookie值的长度相加来计算的。测试是在Chrome 71.0.3578.98上完成的。你是如何发现5-8Kb的限制的? - Mumrah81
当响应中所有Set-Cookie头的总大小超过4096个字符时,我在Chrome开发者控制台中会收到警告。所以我猜测,Chrome可以存储超过4096个字符,但不能在单个响应中设置所有字符? - Dai
2
经过更多测试,看来你是正确的。如果提供多个Set-Cookie头,则4096字节的限制应用于所有Set-Cookie头的串联值。您仍然可以创建多个cookie,只要在一个标头中完成即可。使用多个Set-Cookie头似乎只有最后一个起作用。达到每个域204KB的限制的唯一方法是使用javascript创建cookie。另一个奇怪的点是使用Set-Cookie头创建的cookie没有插入Chrome的sqllite数据库,但仍会在下一次请求中发送。 - Mumrah81
@Mumrah81 鉴于此答案得到了很多赞,我选择更新措辞,虽然这是很危险的,但旨在反映Dai指出的问题。以下是更好的问题和答案:https://dev59.com/m3RB5IYBdhLWcg3wZWXi - Andy Ray

4
你可以通过在迭代中从JavaScript设置和读取cookie大小来测试它,如果你只关注现代浏览器的话。
这正是我过去所做的。这个网站就是关于这个的,它还包括浏览器的限制。
但请记住,匹配的cookie将随着每个HTTP请求传输,因此可能会极大地影响感知的响应时间。

0

以下是您可以参考的详细信息 - http://browsercookielimits.iain.guru/

通常允许以下内容: 总共300个cookie 每个cookie的大小为4096字节 每个域名最多20个cookie 每个域名最多81920字节*

  • 假设最大大小为4096的20个cookie,则总大小为81920字节。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接