Cookie 的 name 和 value 允许哪些字符,要不要编码?格式怎样?

作者:vkvi 来源:ITPOW(原创) 日期:2022-11-8

Cookie 的 name 允许哪些字符?

除以下字符以外US-ASCII 字符:

控制符、空格、Tab,以及分隔符:( ) < > @ , ; : \ " / [ ] ? = { }

也就是说“-”是允许的、数字开头也是允许的(测试过),毕竟这不是软件编程命名。

Cookie 的 value 允许哪些字符?

Mozilla 中是这么说的:A <cookie-value> can optionally be wrapped in double quotes and include any US-ASCII character excluding a control character, Whitespace, double quotes, comma, semicolon, and backslash.

在 .NET + Chrome 中测试,与上述情况略有不同

双引号引起来?

双引号引起来,不具备任何语义,它仍然被当作 value 的部分,并不表示双引号中的内容才是 value,取值(.NET 后端取值,下同)时,也并不会排除掉两端的双引号。

空格?

允许,被当作普通字符对待。

Tab?

不允许,进一步研究发现,IIS 将该 Cookie 发送到了浏览器的,但是浏览器因为发现 value 有 Tab,并没有写入,提示 This Set-Cookie header had invalid syntax。

中间的双引号?

允许,被当作普通字符对待。

逗号?

允许,被当作普通字符对待。

分号?

抛弃分号及分号后面的内容,进一步研究发现,IIS 将该 Cookie 发送到了浏览器的,但是浏览器因为发现分号,就只写入分号前面的内容。

反斜杠?正斜杠?

允许,被当作普通字符对待。

等号?

允许,被当作普通字符对待。取值也没问题。

中文?

乱码

value 要不要编码?

为了解决中文乱码、特殊字符,我们常常见到大家对 value 使用 UrlEncode,但这是我们应用层面的,Cookie 取出来时,并不会自动解码,需要我们自己去 UrlDecode 解码。

格式怎样?

name1=value1; name2=value2

使用“分号+空格”间隔,尾巴不用加分号。

相关文章