用于cookies的编码方案
指定允许每个cookie至少4096字节 现在,为了知道每个cookie允许的字符数,我需要知道cookie使用的字符编码,因为RFC以字节而不是字符来指定每个cookie的最大大小 我如何知道用于存储cookie的编码 它是由用于创建cookie的编程语言(例如PHP、JavaScript)使用的字符编码决定的,还是由存储cookie的浏览器使用的字符编码决定的 更新: 我进行了一些测试,FF、Chrome和Opera似乎在使用UTF-8存储cookie,编码显然会影响cookie中可以存储的字符数。cookie中允许的最大字符数将受到用于在客户端上存储cookie的字符编码的影响用于cookies的编码方案,cookies,browser,unicode,Cookies,Browser,Unicode,指定允许每个cookie至少4096字节 现在,为了知道每个cookie允许的字符数,我需要知道cookie使用的字符编码,因为RFC以字节而不是字符来指定每个cookie的最大大小 我如何知道用于存储cookie的编码 它是由用于创建cookie的编程语言(例如PHP、JavaScript)使用的字符编码决定的,还是由存储cookie的浏览器使用的字符编码决定的 更新: 我进行了一些测试,FF、Chrome和Opera似乎在使用UTF-8存储cookie,编码显然会影响cookie中可以存储的
我怀疑浏览器使用UTF-8作为Cookie的字符编码,我使用了单字节UTF-8字符(
1
),双字节UTF-8字符(
),3字节UTF-8字符(畀代码>),以及一个4字节UTF-8字符(似乎更多地由程序员(在浏览器后面)决定,而不是由编程语言决定。通常Cookie值是URL编码的,但没有任何要求。
看一看,完成你的研究(添加Safari特例)。可能也有帮助。无论浏览器内部如何存储Cookie,它们最终都必须在设置Cookie
和Cookie
HTTP头字段中传输。RFC的作者最可能想到的是这些字段的编码长度。至少在大多数RFC中是这样因此,“cookie的大小”取决于它在HTTP头中的编码方式
根据,请求头字段应为
组成字段值的八位字节,由*文本或标记、分隔符和带引号字符串的组合组成
其中*文本依次为:
可能包含非ISO字符集的字符-
8859-1[22]仅当根据RFC 2047的规则进行编码时
定义了所谓的“MIME编码”,在我看来,它有一些有趣的规则。也就是说,根据它的规则,为了对外来字符集进行编码,您必须使用“引用的可打印”格式:=?UTF-8?Q?=48=65=6c=6c=6f?=
,或者使用“Base64格式:=?UTF-8?B?SGVsbG8=?=
。(请注意,这里的两个示例都对单词“Hello”进行编码。第一个使用27个字节,第二个使用20个字节,但是这不包括cookie名称和属性)
此外,根据RFC2047,您的“编码字”长度可能不会超过76个字符,因此,如果我理解正确,则较长的cookie值必须编码为一组76字节的片段,每个片段以=?UTF-8?Q?=
mumbo jumbo开头
我测试了如果我通过Apache使用PHP设置一个非ASCII(俄语)cookie会发生什么情况。生成的set cookie
头没有字符集规范,使用URL编码,长度超过76字节(对于标准来说就这么多了,对吧?)
CookieName=%D0%92+%D0…%B0%D0%B9;过期时间=周四,2014年9月11日19:59:18 GMT;路径=/tmp/;域=.some.domain
与176个字符的句子相对应的cookie值(带属性)的总长度为923字节
总而言之,我认为你的问题无法得到严格的答案,但这仍然是一个有趣的问题