3.2.5

https://datatracker.ietf.org/doc/html/rfc7230#section-2.5 에서 말한 것 처럼

헤더 필드나 헤더 영억의 길이 제한을 미리 정의해두지 않았다.

임시(AD HOC) 제한이 발견되며, 특정 필드는 의미에 따라 달라진다.

처리가능한 것 보다 큰 요청 헤더 필드나 필드의 집합을 받은 서버는 반드시 적절한 4xx 에러를 응답해야 한다(Client Error). 해당 필드를 무시하면 요청 스머글링 공격으로 인해 취약성이 증가한다.

스머글링 : https://datatracker.ietf.org/doc/html/rfc7230#section-9.5 https://lactea.kr/entry/Paypal에서-발견된-HTTP-Request-Smuggling-설명-및-예제 smuggling : 밀반입, 밀수품

클라이언트는 처리량보다 긴 헤더가 왔고, 삭제하거나 무시해도 메세지 프레이밍 또는 응답의 의미를 변경하지 않을 경우 헤더 필드를 버리나 자를 수 있다(MAY).

3.2.6

대부분의 헤더 필드 값은 공통된 문법 요소(token, quoted-string, and comment)를 가진다. 해당 요소는 공백이나 구분자로 나누어진다.

Token

구분자는 US-ASCII 캐릭터 안에서 선택해야 하며, (DQUOTE and "(),/:;<=>?@[\\]{}") 는 허락되지 않는다.

token          = 1*tchar

tchar          = "!" / "#" / "$" / "%" / "&" / "'" / "*"
                    / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~"
                    / DIGIT / ALPHA
                    ; any VCHAR, except delimiters

quoted-string

쌍따옴표를 이용해서 감싸면 단일 값으로 파싱해야 한다.

quoted-string  = DQUOTE *( qdtext / quoted-pair ) DQUOTE
qdtext         = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text
obs-text       = %x80-FF

ascii 값은 https://donsnotes.com/tech/charsets/ascii.html 참고 %x80 이후로는 ascii 확장판

comment

커멘트는 괄호로 감싼 헤더 필드. 커멘트는 필드 값 정의에 커멘트 파트가 포함되어 있어야만 허용된다.

comment        = "(" *( ctext / quoted-pair / comment ) ")"
ctext          = HTAB / SP / %x21-27 / %x2A-5B / %x5D-7E / obs-text

백슬래쉬 옥텟(\\)은 quoted-string 이나 comment에서 single-octet quoting mechanism 으로 사용된다.