Format untuk header HTTP didefinisikan dalam spesifikasi HTTP. Saya akan berbicara tentang HTTP 1.1, yang spesifikasinya adalah RFC 2616 . Di bagian 4.2, 'Header Pesan', struktur umum header didefinisikan:
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>
Definisi ini bersandar pada dua pilar utama, token dan TEXT. Keduanya didefinisikan di bagian 2.2, 'Aturan Dasar'. Token adalah:
token = 1*<any CHAR except CTLs or separators>
Pada gilirannya bertumpu pada CHAR, CTL dan pemisah:
CHAR = <any US-ASCII character (octets 0 - 127)>
CTL = <any US-ASCII control character
(octets 0 - 31) and DEL (127)>
separators = "(" | ")" | "<" | ">" | "@"
| "," | ";" | ":" | "\" | <">
| "/" | "[" | "]" | "?" | "="
| "{" | "}" | SP | HT
TEXT adalah:
TEXT = <any OCTET except CTLs,
but including LWS>
Di mana LWS adalah ruang putih linier, yang definisinya tidak akan saya buat, dan OCTET adalah:
OCTET = <any 8-bit sequence of data>
Ada catatan yang menyertai definisi:
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].
Jadi, dua kesimpulan. Pertama, jelas bahwa nama header harus terdiri dari subset karakter ASCII - alfanumerik, beberapa tanda baca, tidak banyak lagi. Kedua, tidak ada dalam definisi nilai header yang membatasi ke ASCII atau mengecualikan karakter 8-bit: itu secara eksplisit terdiri dari oktet, dengan hanya karakter kontrol yang dilarang (perhatikan bahwa CR dan LF dianggap sebagai kontrol). Selanjutnya, komentar pada produksi TEXT menyiratkan bahwa oktet harus ditafsirkan sebagai ISO-8859-1, dan bahwa ada mekanisme pengkodean (yang mengerikan, kebetulan) untuk mewakili karakter di luar pengkodean itu.
Jadi, untuk menanggapi @BalusC secara khusus, cukup jelas bahwa menurut spesifikasi, nilai header ada di ISO-8859-1. Saya telah mengirim karakter high-8859-1 (khususnya, beberapa vokal beraksen seperti yang digunakan dalam bahasa Prancis) dalam tajuk dari Tomcat, dan meminta mereka diinterpretasikan dengan benar oleh Firefox, jadi sampai batas tertentu, ini berfungsi dalam praktiknya maupun dalam teori (walaupun ini adalah tajuk Lokasi, yang berisi URL, dan karakter ini tidak sah di URL, jadi ini sebenarnya ilegal, tetapi di bawah aturan yang berbeda!).
Yang mengatakan, saya tidak akan bergantung pada ISO-8859-1 yang bekerja di semua server, proksi, dan klien, jadi saya akan tetap berpegang pada ASCII sebagai masalah pemrograman defensif.