Format nagłówków HTTP jest zdefiniowany w specyfikacji HTTP. Opowiem o HTTP 1.1, dla którego specyfikacja to RFC 2616 . W sekcji 4.2 „Nagłówki wiadomości” zdefiniowano ogólną strukturę nagłówka:
message-header = field-name ":" [ field-value ]
field-name = token
field-value = *( field-content | LWS )
field-content = <the OCTETs making up the field-value
and consisting of either *TEXT or combinations
of token, separators, and quoted-string>
Ta definicja opiera się na dwóch głównych filarach: tokenie i TEKSTIE. Oba są zdefiniowane w sekcji 2.2, „Podstawowe zasady”. Token to:
token = 1*<any CHAR except CTLs or separators>
Z kolei spoczywające na CHAR, CTL i separatorach:
CHAR = <any US-ASCII character (octets 0 - 127)>
CTL = <any US-ASCII control character
(octets 0 - 31) and DEL (127)>
separators = "(" | ")" | "<" | ">" | "@"
| "," | ";" | ":" | "\" | <">
| "/" | "[" | "]" | "?" | "="
| "{" | "}" | SP | HT
TEKST to:
TEXT = <any OCTET except CTLs,
but including LWS>
Gdzie LWS to liniowa biała przestrzeń, której definicji nie będę reprodukować, a OCTET to:
OCTET = <any 8-bit sequence of data>
Definicja zawiera notatkę:
The TEXT rule is only used for descriptive field contents and values
that are not intended to be interpreted by the message parser. Words
of *TEXT MAY contain characters from character sets other than ISO-
8859-1 [22] only when encoded according to the rules of RFC 2047
[14].
Więc dwa wnioski. Po pierwsze, jasne jest, że nazwa nagłówka musi składać się z podzbioru znaków ASCII - alfanumerycznych, niektórych znaków interpunkcyjnych, a nie wielu innych. Po drugie, nic nie ma w definicji wartości nagłówka, która ogranicza ją do ASCII lub wyklucza znaki 8-bitowe: jest wyraźnie złożona z oktetów, z ograniczonymi tylko znakami kontrolnymi (zwróć uwagę, że CR i LF są uważane za kontrole). Ponadto komentarz do produkcji TEKSTU sugeruje, że oktety należy interpretować jako zawarte w ISO-8859-1 i że istnieje mechanizm kodowania (który, nawiasem mówiąc, jest okropny), do reprezentowania znaków poza tym kodowaniem.
Tak więc, aby odpowiedzieć w szczególności na @BalusC, jasne jest, że zgodnie ze specyfikacją wartości nagłówka są w ISO-8859-1. Wysłałem wysoko 8859-1 znaków (konkretnie niektóre akcentowane samogłoski używane w języku francuskim) w nagłówku z Tomcat i kazałem je poprawnie interpretować przez Firefox, więc do pewnego stopnia działa to zarówno w praktyce, jak i w teorii (chociaż był to nagłówek lokalizacji, który zawiera adres URL, a te znaki nie są dozwolone w adresach URL, więc było to w rzeczywistości nielegalne, ale na innej zasadzie!).
To powiedziawszy, nie będę polegał na ISO-8859-1 działającej na wszystkich serwerach, serwerach proxy i klientach, więc trzymałbym się ASCII w ramach programowania obronnego.