development

HTTP 서버가 HTTP 헤더 이름에 밑줄을 금지하는 이유

big-blog 2020. 12. 11. 19:05
반응형

HTTP 서버가 HTTP 헤더 이름에 밑줄을 금지하는 이유


몇 달 전에 nginx 프록시에 의해 전송되지 않은 "SESSION_ID"라는 사용자 지정 HTTP 헤더에 문제가 발생했습니다.

HTTP 프로토콜의 RFC에 따라 밑줄이 금지된다고 들었습니다.

인터넷 검색을 통해 아파치 또는 nginx 와 같은 대부분의 서버가 이를 불법으로 정의 한다는 사실을 발견했습니다 .

RFC2616 섹션 4.2에 따르면

RFC 822의 섹션 3.1에 제공된 것과 동일한 일반 형식을 따릅니다. [9]

그리고 RFC822 는 말한다

필드 이름은 인쇄 가능한 ASCII 문자로 구성되어야합니다 (즉, 콜론을 제외한 33.에서 126. 사이의 값을 갖는 문자).

밑줄은 ASCII 테이블의 10 진수 95 자입니다 (33-126 범위에 속함). 내가 무엇을 놓치고 있습니까?


그들은 금지되어 있지 않습니다. CGI 유산입니다. 여기

명시 적으로 설정하지 않으면 underscores_in_headers on;nginx는 밑줄이있는 HTTP 헤더를 자동으로 삭제합니다 (HTTP 표준에 따라 완벽하게 유효 함). 이는 헤더를 CGI 변수에 매핑 할 때 모호함을 방지하기 위해 수행됩니다. 대시와 밑줄은 모두 해당 프로세스 중에 밑줄에 매핑되기 때문입니다.


헤더 필드의 밑줄은 허용되지만 ( RFC 7230, 섹션 3.2. ) 실제로는 드뭅니다.

참고 URL : https://stackoverflow.com/questions/22856136/why-http-servers-forbid-underscores-in-http-header-names

반응형