2010-05-23 49 views
4

根据RFC 2109,2965 cookie的值可以是HTTP令牌或带引号的字符串,并且令牌不能包含非ASCII字符。为什么非法cookie由浏览器发送并由网络服务器接收(rfc 2109,2965)?

  1. Cookie的RFC 2109RFC2965
  2. HTTP的RFC 2068和2616令牌定义:http://tools.ietf.org/html/rfc2616#page-16

不过,我已经发现,Firefox浏览器(3.0.6)将饼干UTF-8字符串原样是 和我测试的三个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的和CGI HTTP_COOKIE变量的原始响应:

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

我怎么错过?根据Internet Official Protocol Standards (STD 1, RFC 5000)

+2

这是互联网。人们使用这些标准在usenet上阻止他人,而不是实施他们的软件。 – jrockway 2010-05-23 04:11:10

+1

@jrockway我会理解,如果这是一个Web服务器,但所有3最流行(Linux)的? – Artyom 2010-05-23 04:14:29

回答

3

RFC 2109(Feb 1997)已经过时并被RFC 2965(2000年10月)取代。

您还可能有兴趣在近期的March 7, 2010 draft修改2965

令牌在2965唯一的定义是:

非正式,非特殊的序列,非 - 白色的空格字符

我不认为UTF-8的整体被该定义所禁止 - 只有可能被误认为是控制/语法的字符ch aracters。

+0

但是根据新的RFC值仍然是令牌或引号对,所以它不能解决我的问题 – Artyom 2010-05-23 04:01:30

+0

完整引用:“以下语法使用符号和令牌DIGIT(十进制数字),令牌(非正式地,非序列 - 特殊的非空白字符)以及来自HTTP/1.1规范[RFC2616]的http_URL来描述它们的语法。“ - 因此很显然,令牌**指的是RFC2616(http),并且它禁止令牌为非assci – Artyom 2010-05-23 04:37:51

+0

并且您链接到的草稿中的BTW更加清晰,根据ro 2616 HTTP/1.1 RFC – Artyom 2010-05-23 04:43:37

1

RFC 2965已被废弃RFC 6265。根据此rfc:

cookie名称必须是一个令牌,它由可打印ascii字符组成,不包括 ()<> @, :\“/ []?= {} SPACE TAB

该cookie值包含可打印ascii字符而不包含SPACE”,“ \有被引号包围的可能性

相关问题