HTTP üstbilgilerinin biçimi HTTP belirtiminde tanımlanır. Belirtimi RFC 2616 olan HTTP 1.1 hakkında konuşacağım . Bölüm 4.2, 'İleti Başlıkları' bölümünde, bir başlığın genel yapısı tanımlanmıştır:
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>
Bu tanım, token ve TEXT olmak üzere iki ana sütuna dayanmaktadır. Her ikisi de bölüm 2.2, 'Temel Kurallar' bölümünde tanımlanmıştır. Jeton:
token = 1*<any CHAR except CTLs or separators>
Buna karşılık CHAR, CTL ve ayırıcılara dayandırılır:
CHAR = <any US-ASCII character (octets 0 - 127)>
CTL = <any US-ASCII control character
(octets 0 - 31) and DEL (127)>
separators = "(" | ")" | "<" | ">" | "@"
| "," | ";" | ":" | "\" | <">
| "/" | "[" | "]" | "?" | "="
| "{" | "}" | SP | HT
METİN:
TEXT = <any OCTET except CTLs,
but including LWS>
LWS, tanımı çoğaltmayacağım lineer beyaz boşluktur ve OCTET:
OCTET = <any 8-bit sequence of data>
Tanıma eşlik eden bir not var:
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].
Yani, iki sonuç. İlk olarak, başlık adının ASCII karakterlerinin bir alt kümesinden oluşması gerektiği açıktır - alfasayısallar, bazı noktalama işaretleri, başka bir şey değil. İkinci olarak, üstbilgi değeri tanımında ASCII ile sınırlayan veya 8 bitlik karakterleri hariç tutan hiçbir şey yoktur : açıkça sekizli karakterlerden oluşur, yalnızca kontrol karakterleri engellenir (CR ve LF'nin kontrol olarak kabul edildiğine dikkat edin). Ayrıca, TEXT üretimi hakkındaki yorum, sekizlilerin ISO-8859-1'de olduğu şeklinde yorumlanması ve bu kodlamanın dışındaki karakterleri temsil etmek için bir kodlama mekanizması (bu arada, korkunç) olduğunu ima eder.
Bu nedenle, özellikle @ BalusC'ye yanıt vermek için, spesifikasyona göre başlık değerlerinin ISO-8859-1'de olduğu oldukça açıktır. Tomcat dışında bir başlıkta yüksek 8859-1 karakter (özellikle Fransızcada kullanılan bazı aksanlı ünlüler) gönderdim ve Firefox tarafından doğru bir şekilde yorumlandım, bu yüzden bir dereceye kadar, bu hem pratikte hem de teoride çalışıyor (bu bir URL içeren bir Konum başlığı olmasına rağmen ve bu karakterler URL'lerde yasal değildir, bu yüzden bu aslında yasadışıdır, ancak farklı bir kural altındadır!).
Bununla birlikte, tüm sunucular, proxy'ler ve istemciler arasında çalışan ISO-8859-1'e güvenmeyeceğim, bu yüzden savunma programlama konusunda ASCII'ye bağlı kalacağım.