5

根据 RFC 2109,2965 cookie 的值可以是 HTTP 令牌或带引号的字符串,并且令牌不能包含非 ASCII 字符。

  1. Cookie 的 RFC 2109RFC2965
  2. HTTP 的 RFC 2068 和 2616 令牌定义:https ://www.rfc-editor.org/rfc/rfc2616#page-16

但是我发现 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_COOKIECGI 变量的原始响应:

wikipp=1234; wikipp_username=ארתיום

我想念什么?

4

2 回答 2

3

根据Internet 官方协议标准(STD 1,RFC 5000),RFC 2109(1997 年 2 月)已过时并被RFC 2965 (2000 年 10 月)取代。

您可能还对2010 年 3 月 7 日更新的草案感兴趣,以修订 2965。

2965中对令牌的唯一定义是:

非正式地,一系列非特殊、非空白字符

我不会认为该定义不允许使用整个 UTF-8 - 只有可能被误认为控制/语法字符的字符。

于 2010-05-23T03:57:07.927 回答
2

RFC 2965已被RFC 6265淘汰。根据这个 rfc:

cookie 名称必须是一个标记,它由不带 ( ) < > @ 的可打印 ascii 字符组成;: \ " / [ ] ? = { } 空格标签

cookie 值由可打印的 ascii 字符组成,没有空格 " , ; \ 可能被引号包围

于 2013-06-18T14:00:02.260 回答