cookies - 为什么非法 cookie 由浏览器发送并由网络服务器接收(rfc 2109、2965)?

标签 cookies webserver rfc

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

  • Cookie 的 RFC 2109RFC2965
  • HTTP 的 RFC 2068 和 2616 token 定义:http://tools.ietf.org/html/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_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/

    相关文章:

    javascript - 提交和页面更改后,表单值保留为 cookie

    java - 在独立 Tomcat 服务器上,可以设置多少更高的值 - maxThreads 和 maxConnections?

    json - JSON规范和BOM/字符集编码的用法

    linux - NLST FTP 命令应该返回带或不带绝对路径的记录吗?

    ssl - 解释由 RFC6066 服务器名称指示定义的 SSL ClientHello SNI 消息扩展语法

    javascript - asp.net,删除一个cookie

    node.js cookie 与 request.jar

    cookies - 如何阻止子域使用域 cookie?

    php - 关闭浏览器可以终止服务器上的 PHP 脚本吗?

    php - 如何检测浏览器是否向服务器请求某个文件