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 문자가 허용됩니다.