网络浏览器的Cookie键的最大大小是多少?

344

浏览器Cookie的键的最大大小是多少?

我知道Cookie的最大大小是4KB,但键是否也有限制?


2
还要注意的是:Web服务器(nginx,IIS,apache等)对HTTP头的行长度有限制。它们通常限制为4KB或8KB。因此,即使浏览器支持更大的cookie头,如果没有在这些服务器上进行特殊配置,它们可能无法正常工作。 - tsh
5个回答

404

关于4K的限制,它适用于整个Cookie,包括名称、值、过期日期等。如果您想要支持大多数浏览器,建议将名称保持在4000字节以下,并且整个Cookie大小在4093字节以下。

需要注意的是,如果名称太长,则无法删除Cookie(至少在JavaScript中是这样)。更新Cookie并将其设置为过期来删除Cookie。如果名称太长,比如4090字节,我发现我无法设置到期日期。我只是出于兴趣而研究了这一点,而不是计划使用那么长的名称。

要了解更多信息,请参阅常见浏览器的“浏览器Cookie限制”。


顺便说一句,如果您想要支持大多数浏览器,那么请不要超过每个域50个Cookie每个域4093字节的限制。也就是说,所有Cookie的大小不应超过4093字节。

这意味着您可以有一个4093字节的Cookie,或者两个2045字节的Cookie等等。


之前我以为4095字节是由于IE7的限制,但现在Mobile Safari采用4096字节,每个Cookie多出3个字节的开销,所以最大为4093字节。


18
4K 的限制是指在一个特定域名下的所有 cookie,因此当达到这个限制时,您很可能无法再创建新的 cookie。 - ulkas
6
@ulkas:我现在已经添加了这个。一旦达到限制,我观察到在许多浏览器中,您可以创建新的 cookie,但它会删除一堆现有的 cookie。 - Iain
1
注意:RFC 2965已被废弃并由RFC 6265取代。限制部分基本保持不变(请参见:https://tools.ietf.org/html/rfc6265#section-6.1),但现在RFC 6265是规范来源。 - Jim OHalloran
为了支持大多数浏览器,每个域名的 cookie 数量不应超过 50 个,并且所有 cookie 的总大小(跨所有 cookie)应小于或等于 4093 字节。 - Ankit

120

RFC 2965规定了cookie的工作方式,其中明确规定cookie的键或值大小没有最大长度限制,并鼓励实现支持任意大的cookie。每个浏览器的实现最大长度会有所不同,因此请查阅各个浏览器的文档,参见RFC第5.3节“实现限制”。


22
像往常一样,“规格”和“现实世界”似乎完全不同。因为Cookies与每个http请求一起发送,所以限制实际上是件好事。 - BenSwayne
4
如果实际上存在限制,那么这个规格就相当无用了!尽管如此,这仍然是“正确”的答案! - lmat - Reinstate Monica
4
我不明白为什么浏览器选择不遵循这个规范。既然已经有像localStorage这样的东西存在,我为什么不能把超过4KB(其实也不是很多)的内容存入cookie中呢?请您翻译这段话。 - William
4
注意:RFC 2965已被废止,并被RFC 6265所取代。限制部分基本未更改(请参见:https://tools.ietf.org/html/rfc6265#section-6.1),但现在RFC 6265是官方来源。 - Jim OHalloran

48
这并不是完全直接回答原问题的答案,但对于那些试图快速了解他们的 cookie 信息存储计划而不实施复杂限制算法的好奇心者来说是相关的。该字符串包含 4096 个 ASCII 字符字节:

"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"


5
当我正要了解4KB可以存储多少个字符时,这个答案出现了,让我的一天变得美好!以下是另一个与此问题相关的答案。 - Enfield Li
有趣。然而,efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz - Elliott Beach

40

4
需要注意的是,使用Web存储的一个警告是,如果没有解决方法,存储在Web存储中的数据只能存储在/访问自HTTP或HTTPS,而不能在它们之间共享(即使是对于同一网站)。 - ilasno
2
据我所知,传统的cookie也存在同样的限制。 - Steve Midgley
2
最重要的警告是,与 Web 存储不同,会话存储和本地存储仅可从浏览器访问,而无法从服务器访问。在选择使用这些存储方式或者 Cookie 之间,一定要考虑到这一点,因为 Cookie 可以在浏览器和服务器上都读取。 - Vadorequest
本地存储在iOS上无法正常工作,请参见https://dev59.com/cMDqa4cB1Zd3GeqPk8f-#68087149。 - Hugo Jerez

17

一个 cookie key(用于标识会话)和一个 cookie 是同一件事情,只是在不同的方式下使用。因此限制也是相同的。根据微软官方文档 MSDN,限制为4096字节。

通常 cookie 的限制是 4096 字节,每个站点不能存储超过 20 个 cookies。通过使用一个带有子键的单个 cookie,可以减少这些网站允许使用的 20 个 cookies 的数量。此外,单个 cookie 占用大约50个字符的开销(过期信息等),再加上您在其中存储的值的长度,所有这些都计入了4096字节的限制。如果使用五个子键代替五个单独的 cookies,则可以节省单独 cookies 的开销,并且可以节省约200字节。


8
顺便提一下,即使您有大约4KB的浏览器cookie存储空间可供使用,您也应认真考虑这是否是一个好主意。 - NotMe
请问您能否确认每个域名/站点的cookie数量不能超过20个?或者现在已经增加了吗? - Mutant

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