根据 RFC 2109,2965 cookie 的值可以是 HTTP token 或带引号的字符串,并且 token 不能包含非 ASCII 字符。
但是我发现 Firefox 浏览器(3.0.6)按原样发送带有 utf-8 字符串的 cookie
和我测试的三个 Web 服务器(apache2、lighttpd、nginx)将这个字符串按原样传递给
应用。
例如,来自浏览器的原始请求:
$ nc -l -p 8080
GET /hello HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.9) Gecko/2009050519 Firefox/2.0.0.13 (Debian-3.0.6-1)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1255,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: wikipp=1234; wikipp_username=ארתיום
Cache-Control: max-age=0
以及 apache、nginx 和 lighttpd 的原始响应
HTTP_COOKIE
CGI变量:wikipp=1234; wikipp_username=ארתיום
我想念什么?
最佳答案
RFC 2109 (Feb 1997) 已过时并被 RFC 2965 取代(2000 年 10 月),根据 Internet Official Protocol Standards (STD 1, RFC 5000) .
您可能还对最近的 March 7, 2010 draft 感兴趣修订 2965。
唯一的定义 token 2965年是:
informally, a sequence of non-special, non-white space characters
我不会认为该定义不允许使用整个 UTF-8 - 只有可能被误认为是控制/语法字符的字符。
关于cookies - 为什么非法 cookie 由浏览器发送并由网络服务器接收(rfc 2109、2965)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2890624/