Định dạng cho các tiêu đề HTTP được xác định trong đặc tả HTTP. Tôi sẽ nói về HTTP 1.1, trong đó đặc tả là RFC 2616 . Trong phần 4.2, 'Tiêu đề thư', cấu trúc chung của tiêu đề được xác định:
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>
Định nghĩa này dựa trên hai trụ cột chính, mã thông báo và văn bản. Cả hai đều được định nghĩa trong phần 2.2, 'Quy tắc cơ bản'. Mã thông báo là:
token = 1*<any CHAR except CTLs or separators>
Lần lượt nghỉ ngơi trên CHAR, CTL và dải phân cách:
CHAR = <any US-ASCII character (octets 0 - 127)>
CTL = <any US-ASCII control character
(octets 0 - 31) and DEL (127)>
separators = "(" | ")" | "<" | ">" | "@"
| "," | ";" | ":" | "\" | <">
| "/" | "[" | "]" | "?" | "="
| "{" | "}" | SP | HT
VĂN BẢN là:
TEXT = <any OCTET except CTLs,
but including LWS>
Trong đó LWS là không gian trắng tuyến tính, với định nghĩa tôi sẽ không tái tạo và OCTET là:
OCTET = <any 8-bit sequence of data>
Có một lưu ý kèm theo định nghĩa:
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].
Vì vậy, hai kết luận. Đầu tiên, rõ ràng tên tiêu đề phải được tạo từ một tập hợp các ký tự ASCII - chữ số, một số dấu câu, không phải là nhiều dấu chấm khác. Thứ hai, không có gì trong định nghĩa của giá trị tiêu đề giới hạn nó ở ASCII hoặc loại trừ các ký tự 8 bit: nó bao gồm các octet rõ ràng, chỉ có các ký tự điều khiển bị chặn (lưu ý rằng CR và LF được coi là các điều khiển). Hơn nữa, nhận xét về sản xuất văn bản ngụ ý rằng các octet sẽ được hiểu là trong ISO-8859-1, và có một cơ chế mã hóa (thật kinh khủng, tình cờ) để thể hiện các ký tự bên ngoài mã hóa đó.
Vì vậy, để trả lời @BalusC nói riêng, khá rõ ràng rằng theo đặc điểm kỹ thuật, các giá trị tiêu đề nằm trong ISO-8859-1. Tôi đã gửi các ký tự cao 8859-1 (cụ thể là một số nguyên âm có dấu như được sử dụng bằng tiếng Pháp) trong một tiêu đề ra khỏi Tomcat và do chúng giải thích chính xác bởi Firefox, do đó, ở một mức độ nào đó, nó hoạt động trong thực tế cũng như trên lý thuyết (mặc dù đây là tiêu đề Vị trí, chứa URL và các ký tự này không hợp pháp trong các URL, vì vậy đây thực sự là bất hợp pháp, nhưng theo một quy tắc khác!).
Điều đó nói rằng, tôi sẽ không dựa vào ISO-8859-1 hoạt động trên tất cả các máy chủ, proxy và máy khách, vì vậy tôi sẽ gắn bó với ASCII như một vấn đề về lập trình phòng thủ.