HTTP हेडर के लिए प्रारूप HTTP विनिर्देश में परिभाषित किया गया है। मैं HTTP 1.1 के बारे में बात करने जा रहा हूं, जिसके लिए विनिर्देश RFC 2616 है । खंड ४.२, section संदेश प्रमुख ’में, हेडर की सामान्य संरचना को परिभाषित किया गया है:
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>
यह परिभाषा दो मुख्य स्तंभों, टोकन और पाठ पर टिकी हुई है। दोनों को खंड 2.2, 'मूल नियम' में परिभाषित किया गया है। टोकन है:
token = 1*<any CHAR except CTLs or separators>
बदले में CHAR, CTL और विभाजकों पर आराम करना:
CHAR = <any US-ASCII character (octets 0 - 127)>
CTL = <any US-ASCII control character
(octets 0 - 31) and DEL (127)>
separators = "(" | ")" | "<" | ">" | "@"
| "," | ";" | ":" | "\" | <">
| "/" | "[" | "]" | "?" | "="
| "{" | "}" | SP | HT
पाठ है:
TEXT = <any OCTET except CTLs,
but including LWS>
जहां LWS लीनियर व्हाइट स्पेस है, जिसकी परिभाषा मैं पुन: पेश नहीं करूंगा, और OCTET है:
OCTET = <any 8-bit sequence of data>
परिभाषा के साथ एक नोट है:
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].
तो, दो निष्कर्ष। सबसे पहले, यह स्पष्ट है कि हेडर नाम ASCII वर्णों के सबसेट से बना होना चाहिए - अल्फ़ान्यूमेरिक्स, कुछ विराम चिह्न, बहुत कुछ नहीं। दूसरे, हेडर मान की परिभाषा में ऐसा कुछ नहीं है जो इसे ASCII तक सीमित करता है या 8-बिट वर्णों को बाहर करता है: यह स्पष्ट रूप से ऑक्टेट्स से बना है, केवल नियंत्रण वर्णों पर ध्यान दें (सीआर और एलएफ को नियंत्रण माना जाता है)। इसके अलावा, TEXT उत्पादन पर टिप्पणी का अर्थ है कि ओसीसी -8859-1 में ऑक्टेट्स की व्याख्या की जानी है, और उस एन्कोडिंग के बाहर वर्णों का प्रतिनिधित्व करने के लिए एक एन्कोडिंग तंत्र (जो भयानक, संयोगवश) है।
तो, विशेष रूप से @BalusC पर प्रतिक्रिया देने के लिए, यह बिल्कुल स्पष्ट है कि विनिर्देश के अनुसार, हेडर मान ISO-8859-1 में हैं। मैंने टॉमकैट से बाहर एक हेडर में उच्च -8859-1 अक्षर (विशेष रूप से, कुछ उच्चारण स्वरों का इस्तेमाल किया है) भेजा है, और उन्हें फ़ायरफ़ॉक्स द्वारा सही ढंग से व्याख्या किया है, इसलिए कुछ हद तक, यह अभ्यास के साथ-साथ सिद्धांत में भी काम करता है (हालांकि यह एक स्थान शीर्षलेख था, जिसमें URL शामिल है, और ये वर्ण URL में कानूनी नहीं हैं, इसलिए यह वास्तव में अवैध था, लेकिन एक अलग नियम के तहत!)।
उस ने कहा, मैं सभी सर्वरों, प्रॉक्सी और क्लाइंट्स पर काम कर रहे ISO-8859-1 पर भरोसा नहीं करूंगा, इसलिए मैं रक्षात्मक प्रोग्रामिंग के मामले में ASCII से चिपके रहूंगा।