2010-05-23 1 views
4

RFC 2109에 따르면 2965 쿠키 값은 HTTP 토큰 또는 인용 문자열 일 수 있으며 토큰에는 비 ASCII 문자를 포함 할 수 없습니다.왜 잘못된 쿠키가 브라우저에서 보내고 웹 서버에서 수신합니까 (rfc 2109, 2965)?

  1. 쿠키의 RFC 2109RFC2965
  2. HTTP의 RFC 2068 및 2616 토큰 정의 : http://tools.ietf.org/html/rfc2616#page-16 그러나

나는 파이어 폭스 브라우저 (3.0.6)은 UTF-8 문자열 된 직후에 쿠키를 전송하는 발견했다 이고 내가 테스트 한 세 개의 웹 서버 (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 

그리고 아파치, nginx를 lighttpd를 HTTP_COOKIE CGI 변수의 원시 응답 :

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

나는 무엇을 그리워 하는가?

+2

인터넷입니다. 사람들은 소프트웨어를 구현하는 것이 아니라 유즈넷에 다른 사람을 불 태우기 위해 표준을 사용합니다. – jrockway

+1

@jrockway 이것이 하나의 웹 서버이지만 3 개의 가장 인기있는 (Linux) 서버라면 모두 이해하겠습니까? – Artyom

답변

3

RFC 2109 (1997 년 2 월)은 Internet Official Protocol Standards (STD 1, RFC 5000)에 따라 더 이상 사용되지 않으며 RFC 2965 (2000 년 10 월)으로 대체되었습니다.

또한 수정하는 것이 더 최근 March 7, 2010 draft에 관심이있을 수 2965.

2965에서 토큰의 유일한 정의는 다음과 같습니다 비공식적

, 비 특별한 일련의 비 -white 공백 문자

나는 그 정의에 의해 허용되지 않는 UTF-8 전체를 고려하지 않을 것이다 - 제어/구문 ch로 오인 될 수있는 문자들만 aracters.

+0

하지만 새 RFC에 따르면 값은 여전히 ​​토큰 또는 인용 쌍이므로 내 문제는 해결되지 않습니다 – Artyom

+0

전체 인용 : "다음 문법은 표기법을 사용하고 DIGIT (십진수), 토큰 (비공식적으로 비 연속 특별한 공백 문자가 아님), HTTP/1.1 명세 [http : // http : // www. - 분명히 토큰 **은 RFC2616 (http)을 ** 참조하고 토큰이 비 assci가되도록 금지합니다 – Artyom

+0

그리고 링크 된 초안에서 BTW는 ro 2616 HTTP/1.1 RFC에 따라 정의 된 토큰이 더 명확하다는 것을 분명히합니다 – Artyom

1

RFC 2965RFC 6265으로 대체되었습니다. 이 rfc에 따르면 :

쿠키 이름은 () <> @없이 인쇄 가능한 ASCII 문자로 구성된 토큰이어야합니다. : \ "/ []? = {} SPACE TAB

쿠키 값은 SPACE없이 인쇄 가능한 ASCII 문자로 구성됩니다.",; \ 따옴표로 둘러 쌀 가능성이 있음