HTTP हैडर लाइन ब्रेक स्टाइल


161

HTTP हेडर में उपयोग के लिए कौन सी लाइन ब्रेक शैली बेहतर है: \r\nया \n, और क्यों?

जवाबों:


224

\r\n, क्योंकि यह प्रोटोकॉल विनिर्देश में लाइन ब्रेक के रूप में परिभाषित किया गया है। RFC2616 धारा 2.2 की शुरुआत में कहता है, "बेसिक रूल्स" , काफी स्पष्ट रूप से:

CR = <US-ASCII CR, कैरिज रिटर्न (13)>
LF = <US-ASCII LF, लाइनफीड (10)>
HTTP / 1.1 अनुक्रम को परिभाषित करता है CR LF, इकाई को छोड़कर सभी प्रोटोकॉल के लिए लाइन के अंत मार्कर के रूप में -तन

RFC2616 को RFC7230 द्वारा तकनीकी रूप से पालन किया गया था, लेकिन यह कोई कठोर बदलाव नहीं करता है और फिर से CRLF को धारा 3 में परिसीमन के रूप में बताता है, और यह कि RFC RFC5234, परिशिष्ट B.1 को "CRLF" के रूप में परिभाषित करता है %x0D %x0A

हालांकि, यह मानते हुए कि लोग जो भी उद्देश्यों के लिए मानक को तोड़ेंगे, धारा 19.3 में "सहिष्णुता प्रावधान" है (ध्यान दें कि यह सही अनुक्रम पुन: प्रसारित करता है ):

संदेश-हेडर फ़ील्ड के लिए लाइन टर्मिनेटर अनुक्रम CRLF है। हालांकि, हम अनुशंसा करते हैं कि ऐसे हेडर्स को पार्स करते समय, एक एलएफ को एक लाइन टर्मिनेटर के रूप में पहचाने और प्रमुख सीआर को अनदेखा करें।

नए RFC7230 में, 72 3.5

यद्यपि स्टार्ट-लाइन और हेडर फ़ील्ड के लिए लाइन टर्मिनेटर अनुक्रम CRLF है, एक प्राप्तकर्ता MAY एक LF को लाइन टर्मिनेटर के रूप में पहचानता है और किसी भी पूर्ववर्ती सीआर को अनदेखा करता है।

इसलिए, जब तक आप ईविल बनना चाहते हैं या अन्यथा आरएफसी के नियमों को तोड़ते हैं, उपयोग करें \r\n


@ फ़्रेड: नहीं, बहुत स्पष्ट होने जैसी कोई बात नहीं है - अनावश्यक पुनरावृत्ति और अनावश्यक रूप से दोहराए जाने और व्यर्थ रूप से एक ही जानकारी को दोहराए जाने के कारण संदेश में परिवर्तन होता है । खासकर जब वही बात ऊपर उद्धृत की गई है - कल्पना से, कम नहीं।
पिस्कवर ने बिल्डिंग

2
अच्छा स्पष्ट उत्तर। यह वही है जो स्टैकऑवरफ्लो के लिए सबसे अच्छा है: ब्लॉग और लेखों के अनावश्यक और अनपेक्षित अव्यवस्था के बिना, सरल स्पष्ट सवालों के सरल स्पष्ट उत्तर।
माइल्स रुट

@ माइल्सआउट: धन्यवाद :)
पिस्कवर ने

2
@ स्पेसर: ऐसी किसी भी बात का ज़िक्र नहीं करता; चूंकि यह अनिवार्य रूप से निर्दिष्ट करता है "यह HTTP के लिए एकमात्र वैध सिंटैक्स है," और कुछ भी सिंटैक्स अमान्य है। बेशक, आप हो सकता है आप चाहते हैं आरएफसी सभी का उल्लंघन है, वहाँ कोई नहीं है जो आप रोक सकता है - लेकिन फिर आप तकनीकी रूप से अब और एक HTTP ग्राहक को लागू नहीं कर रहे हैं, बस कुछ ऐसा है जो की तरह समान दिखता है;)
Piskvor छोड़ दिया निर्माण

2
RFC7230 जो RFC2616 का पालन करता है, उसमें धारा 3.5
शोक

22

आरएफसी 2616 ऐसा कहता है (धारा 2.2, "मूल नियम"):

HTTP / 1.1 अनुक्रम CR LF को
इकाई-निकाय को छोड़कर सभी प्रोटोकॉल तत्वों के लिए अंत-लाइन के रूप में परिभाषित करता है (
सहिष्णु अनुप्रयोगों के लिए परिशिष्ट 19.3 देखें )। इकाई-निकाय के भीतर का अंत-रेखा मार्कर इसके संबंधित मीडिया प्रकार द्वारा परिभाषित किया गया है, जैसा कि खंड 3.7 में वर्णित है।

   CRLF           = CR LF

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.