Cookies 为什么非法cookie通过浏览器发送并由web服务器接收(rfc 2109、2965)?

Cookies 为什么非法cookie通过浏览器发送并由web服务器接收(rfc 2109、2965)?,cookies,webserver,rfc,Cookies,Webserver,Rfc,根据RFC2109,2965 cookie的值可以是HTTP令牌或带引号的字符串,并且令牌不能包含非ASCII字符 Cookie的RFC和 HTTP的RFC 2068和2616令牌定义: 然而,我发现Firefox浏览器(3.0.6)按原样发送带有utf-8字符串的cookie 我测试的三台web服务器(apache2、lighttpd、nginx)按原样将此字符串传递给 应用程序 例如,来自浏览器的原始请求: $ nc -l -p 8080 GET /hello HTTP/1.1 Host:

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

  • Cookie的RFC和
  • HTTP的RFC 2068和2616令牌定义:
  • 然而,我发现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=ארתיום
    
    我错过了什么?

    (1997年2月)已经过时,并被(2000年10月)取代

    您可能还对最近修订的2965感兴趣

    2965中标记的唯一定义是:

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

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

    已经过时了。根据本rfc:

    cookie名称必须是一个令牌,它由可打印的ascii字符组成,不带 ( ) < > @ ,; : \ “/[]?={}空间选项卡


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

    ,但根据新的RFC,值仍然是token或quoted pair,因此它无法解决我的问题引号:“以下语法使用表示法,以及tokens digital(十进制数字)、token(非正式地,一系列非特殊、非空白字符),以及http/1.1规范[RFC2616]中的http_URL来描述它们的语法。”-因此,很明显,令牌指的是RFC2616(http),它禁止令牌是非关联的,顺便说一句,在您链接到的草案中,根据ro 2616 http/1.1 RFCIt的Internet定义的令牌更为明确。人们使用这些标准在usenet上煽动其他人,不是为了实现他们的软件。@jrockway我知道这是一台web服务器,而是所有3台最流行的(Linux)服务器?