[http-headers] HTTP 헤더에 어떤 문자 인코딩을 사용해야합니까?

HTTP 헤더에 “재미있는”HTML 특수 문자 (✰) (자세한 내용은 http://html5boilerplate.com/ 참조 )를 사용하고 있으며 Server사양에 따라 “허용”되는지 궁금합니다.

  • Windows Xp Pro SP 3에서 Chrome의 개발 도구에있는 네트워크 탭을 사용하면 ✰ 괜찮아 보입니다.

  • IE8에서는 ✰가 올바르게 렌더링 되지 않습니다 .

  • w3.org HTML 유효성 검사기가 올바르게 렌더링 하지 않습니다 ( â°대신 ” ” 표시 ).

이제 저는 문자 인코딩에 너무 관심이 없습니다. 솔직히 저는 그것들에 대해별로 신경 쓰지 않습니다. 나는 내가 말한 UTF-8 cus를 맹목적으로 사용합니다. 🙂


다른 파서 / 브라우저 / 엔진 / (무엇이든지간에)의 버그로 인해 불균형이 발생합니까?

이것에 대한 사양이 있습니까 아니면 HTTP 헤더 “값”에 허용되는 문자 목록이 있습니까?



답변

간단히 말해서 ASCII 만 작동합니다. 일부 비 ASCII 바이트는 이전 버전과의 호환성을 위해 허용되지만 표시 할 수는 없습니다.

HTTPbis는 포기 하고 헤더에 ASCII 외에 유용한 인코딩이 없다고 지정했습니다.

역사적으로 HTTP는 ISO-8859-1 문자 세트 [ISO-8859-1]의 텍스트가있는 필드 컨텐츠를 허용했으며, [RFC2047] 인코딩을 통해서만 다른 문자 세트를 지원했습니다. 실제로 대부분의 HTTP 헤더 필드 값은 US-ASCII 문자 집합 [USASCII]의 하위 집합 만 사용합니다. 새로 정의 된 헤더 필드는 필드 값을 US-ASCII 옥텟으로 제한해야합니다 (SHOULD). 수신자는 필드 내용 (obs-text)의 다른 옥텟을 불투명 한 데이터로 취급해야합니다.


이전에 1999 년의 RFC 2616은 다음과 같이 정의했습니다.

* TEXT의 단어는 RFC 2047 [14]의 규칙에 따라 인코딩 된 경우에만 ISO-8859-1 [22] 이외의 문자 집합의 문자를 포함 할 수 있습니다.

RFC 2047은 MIME 인코딩 이므로 다음과 같습니다.

=?UTF-8?Q?=E2=9C=B0?=

그러나 나는 많은 (있는 경우) 클라이언트가 그것을 지원한다고 생각하지 않습니다.


답변

먼저 의견을 읽으십시오.이 답변은 올바른 출처에서 잘못된 결론을 도출 할 수 있으며 편집이 필요합니다.


인쇄 가능한 ASCII 문자를 사용할 수 있으며 ✰와 같은 특수 문자는 사용할 수 없습니다 ( ASCII 가 아님 ).

: 모든 것을 JSON으로 인코딩 할 수 있습니다.

편집 : 처음에는 명확하지 않을 수 있습니다. 헤더에 정의 된 문자 인코딩은 헤더 자체가 아닌 응답 본문에만 적용됩니다. (닭과 계란 문제를 일으킬 수 있기 때문입니다.)


Penchant가 링크 한 스펙에 따라 모든 관련 정의를 요약하고 싶습니다 .

message-header = field-name ":" [ field-value ]
field-name     = token
field-value    = *( field-content | LWS )

그래서 우리는 field-value 뒤에 있습니다 .

LWS            = [CRLF] 1*( SP | HT )
CRLF           = CR LF
CR             = <US-ASCII CR, carriage return (13)>
LF             = <US-ASCII LF, linefeed (10)>
SP             = <US-ASCII SP, space (32)>
HT             = <US-ASCII HT, horizontal-tab (9)>

LWS는 Linear White Space를 나타냅니다. 기본적으로 LWS는 공백 또는 탭이지만 공백 또는 탭 앞에 새 줄을 시작하여 필드 값을 여러 줄로 나눌 수 있습니다.

이를 단순화 해 보겠습니다.

field-value    = <any field-content or Space or Tab>

이제 우리는 field-content 뒤에 있습니다 .

field-content  = <the OCTETs making up the field-value
                 and consisting of either *TEXT or combinations
                 of token, separators, and quoted-string>
OCTET          = <any 8-bit sequence of data>
TEXT           = <any OCTET except CTLs,
                 but including LWS>
CTL            = <any US-ASCII control character
                 (octets 0 - 31) and DEL (127)>
token          = 1*<any CHAR except CTLs or separators>
separators     = "(" | ")" | "<" | ">" | "@"
                 | "," | ";" | ":" | "\" | <">
                 | "/" | "[" | "]" | "?" | "="
                 | "{" | "}" | SP | HT

TEXT는 가장 일반적이며 나머지는 모두 포함하므로 나머지는 잊어 버리십시오.
다음은 US-ASCII 문자 집합 (= ASCII)입니다.

보시다시피 인쇄 가능한 모든 ASCII 문자가 허용됩니다.


답변