हर रजिस्टर्ड HTTP स्टेटस कोड की एक खोज योग्य टेबल, उसका सटीक रीज़न फ़्रेज़ और वह RFC सेक्शन जो उसे परिभाषित करता है। 1xx से 5xx क्लास तक फ़िल्टर करें।
यह रिस्पॉन्स कोड वास्तव में क्या मतलब रखता है? 429 जैसा कोई नंबर या gateway जैसा कोई शब्द टाइप करें ताकि टेबल को फ़िल्टर करें, या उसे एकल क्लास तक सीमित करें। हर पंक्ति कोड, तार पर चलने वाला सटीक रीज़न फ़्रेज़ और उस स्पेसिफिकेशन सेक्शन को दिखाती है जो उसे परिभाषित करता है।
मेल खाने वाले कोड–
कोडरीज़न फ़्रेज़परिभाषित
कोई स्टेटस कोड उस खोज से मेल नहीं खाता।
HTTP स्टेटस कोड को ठीक से पढ़ना
क्लास अंक अनुबंध वहन करता है
हर HTTP रिस्पॉन्स एक तीन-अंकीय कोड से शुरू होता है, और पहला अंक वह एकमात्र हिस्सा है जिसे क्लाइंट को समझना आवश्यक है। RFC 9110 इस बारे में स्पष्ट है: एक क्लाइंट जिसे कोई अपरिचित 499 मिलता है, उसे ठीक 400 की तरह व्यवहार करना चाहिए, क्योंकि क्लास सेमांटिक्स को परिभाषित करती है और शेष दो अंक केवल उन्हें परिष्कृत करते हैं। वह नियम ही प्रोटोकॉल को एक्सटेंसिबल रखता है। 2005 में लिखा गया एक प्रॉक्सी अभी भी एक 451 को सही ढंग से रूट कर सकता है बिना यह जाने कि कानूनी सेंसरशिप क्या है।
पाँच क्लास साफ़ तरीके से इसके आधार पर विभाजित होते हैं कि आगे क्या होने के लिए कौन ज़िम्मेदार है। एक 1xx एक अंतरिम रिस्पॉन्स है, इसलिए वास्तविक उत्तर अभी आ रहा है और कनेक्शन खुला रहता है। एक 2xx का मतलब है अनुरोध सफल रहा और क्लाइंट रुक सकता है। एक 3xx एक रीडायरेक्ट वापस देता है, इसलिए क्लाइंट को कहीं और फिर कोशिश करनी चाहिए। एक 4xx अनुरोध को दोष देता है, इसलिए उसे बिना बदले दोहराने से फिर विफलता होगी। एक 5xx सर्वर को दोष देता है, इसलिए वैसा ही अनुरोध रिट्राई पर सफल हो सकता है। यही कारण है कि रिट्राई लॉजिक विशिष्ट कोड के बजाय क्लास के आधार पर काम करता है: एक 503 को रिट्राई करना उचित है, एक 403 को रिट्राई करना एक बग है।
कोड जो नियमित रूप से भ्रमित किए जाते हैं
301 और 308, या 302 और 307 के बीच का अंतर स्टाइलिस्टिक नहीं है। पुरानी जोड़ी क्लाइंट को रीडायरेक्ट का पालन करते समय POST को GET में फिर से लिखने की अनुमति देती है, जो ब्राउज़र ऐतिहासिक रूप से करते रहे हैं। नई जोड़ी उस राइट को प्रतिबंधित करती है और विधि और बॉडी दोनों को संरक्षित करती है। यदि आप कोई फ़ॉर्म एंडपॉइंट 301 से ले जाते हैं, तो कुछ क्लाइंट चुपचाप सबमिशन को GET में बदल देंगे और पेलोड छोड़ देंगे। जो कुछ भी आइडेम्पोटेंट नहीं है, उसके लिए 308 या 307 का उपयोग करें।
401 और 403 भी इसी तरह मिले-जुले हैं। एक 401 का मतलब है अनुरोध प्रमाणीकृत नहीं था और उसे एक WWW-Authenticate चैलेंज के साथ आना चाहिए, जो क्लाइंट को क्रेडेंशियल के साथ फिर कोशिश करना बताता है। एक 403 का मतलब है सर्वर को पता है कि आप कौन हैं और फिर भी इनकार कर रहा है। बिना चैलेंज हेडर वाला 401 भेजना एक स्पेसिफिकेशन उल्लंघन है, और जब उपयोगकर्ता बस लॉग इन करना भूल गया हो तो 403 भेजना विफलता को डिबग करना कहीं कठिन बना देता है।
4xx क्लास में एक वास्तव में उपयोगी जोड़ी भी है: 400 बनाम 422। एक 400 का मतलब है अनुरोध बिल्कुल पार्स नहीं हो सका, इसलिए सिंटैक्स टूटा हुआ है। एक 422 का मतलब है सिंटैक्स ठीक पार्स हुआ लेकिन कंटेंट वैलिडेशन में विफल रहा। इन दोनों को अलग करने से API क्लाइंट के लिए एक अपारदर्शी विफलता क्रियाशील विफलता में बदल जाती है।
रीज़न फ़्रेज़ केवल मनुष्यों के लिए हैं
कोड के बगल वाला टेक्स्ट, जैसे Not Found या I'm a teapot, रीज़न फ़्रेज़ है। HTTP/1.1 इसे स्टेटस लाइन पर भेजता है, लेकिन HTTP/2 और HTTP/3 ने इसे पूरी तरह हटा दिया, इसलिए एक आधुनिक कनेक्शन अक्सर बिना किसी फ़्रेज़ के केवल नंबर लेकर चलता है। क्लाइंट में किसी भी चीज़ को कभी भी उस स्ट्रिंग पर ब्रांच नहीं करना चाहिए। यह इसलिए मौजूद है ताकि कोई लॉग या कच्चा ट्रेस पढ़ने वाला व्यक्ति बिना लुकअप टेबल के देख सके कि क्या हुआ।
कुछ कोड दिखने से अधिक प्रतिबंधित भी होते हैं। एक 204 और एक 304 में मैसेज बॉडी शामिल नहीं होनी चाहिए, इसलिए एक ऐसा मध्यस्थ जो एक जोड़ता है, एक अमान्य रिस्पॉन्स उत्पन्न कर रहा है। एक HEAD रिस्पॉन्स कोड चाहे जो भी हो, कभी बॉडी नहीं ले जाता। ये फ़्रेमिंग नियम मायने रखते हैं क्योंकि जहाँ बॉडी की उम्मीद नहीं है वहाँ बॉडी कनेक्शन रीयूज़ को डिसिंक्रोनाइज़ कर देती है, जो एक स्पष्ट एरर के बजाय विचित्र क्रॉस-रिक्वेस्ट करप्शन के रूप में सामने आती है।
FAQ
कितने HTTP स्टेटस कोड मौजूद हैं?
IANA पाँचों क्लास में साठ से थोड़े अधिक रजिस्टर्ड कोड सूचीबद्ध करता है, और यह टेबल उन सभी को कवर करती है साथ में कुछ व्यापक रूप से तैनात WebDAV और एक्सटेंशन कोड। रजिस्ट्री जानबूझकर खुली है, इसलिए नए कोड जोड़े जा सकते हैं, जो बिल्कुल वही कारण है कि क्लाइंट को अपरिचित चीज़ों के लिए क्लास अंक पर फ़ॉलबैक करना ही चाहिए।
क्या मुझे स्थायी रीडायरेक्ट के लिए 301 या 308 उपयोग करना चाहिए?
308 का उपयोग करें जब तक कि आप विशेष रूप से पुराने क्लाइंट को POST को GET में बदलने के लिए नहीं चाहते। दोनों का मतलब है संसाधन स्थायी रूप से स्थानांतरित हो गया, लेकिन केवल 308 यह गारंटी देता है कि विधि और बॉडी रीडायरेक्ट से बच जाते हैं। एक सादे पेज मूव के लिए कोई भी काम करता है, और 301 की थोड़ी व्यापक लेगेसी सपोर्ट है।
401 और 403 के बीच क्या अंतर है?
एक 401 का मतलब है आपने प्रमाणीकरण नहीं किया और रिस्पॉन्स में एक WWW-Authenticate हेडर शामिल होना चाहिए जो कैसे बताता है। एक 403 का मतलब है आपने ठीक प्रमाणीकरण किया और फिर भी अनुमति नहीं है। यदि किसी उपयोगकर्ता को बस लॉग इन करना है, तो 401 सही है; यदि उनके खाते में वास्तव में अनुमति की कमी है, तो 403 सही है।
क्या 418 I'm a teapot एक वास्तविक स्टेटस कोड है?
यह उस अर्थ में वास्तविक है कि RFC 2324 इसे Hyper Text Coffee Pot Control Protocol के लिए परिभाषित करता है, जो 1998 का एक April Fools स्पेसिफिकेशन है। IANA इसे आरक्षित रखता है ताकि कोई और 418 दावा न कर सके। यह उचित HTTP का हिस्सा नहीं है, लेकिन कई फ़्रेमवर्क इसे एक ईस्टर एग के रूप में लागू करते हैं।
मेरा क्लाइंट किन कोड को स्वचालित रूप से रिट्राई करना चाहिए?
408, 429 और अधिकांश 5xx रिस्पॉन्स पर रिट्राई करें, और जब कोई Retry-After हेडर मौजूद हो तो हमेशा उसका सम्मान करें। 408 और 429 को छोड़कर 4xx कोड को रिट्राई न करें, क्योंकि समस्या अनुरोध स्वयं है और उसे बिना बदले दोहराने से वैसी ही विफलता होगी।
मेरे HTTP/2 रिस्पॉन्स में रीज़न फ़्रेज़ क्यों नहीं है?
HTTP/2 और HTTP/3 ने वायर फ़ॉर्मेट से रीज़न फ़्रेज़ को हटा दिया क्योंकि किसी क्लाइंट को उसे पार्स करना नहीं था। केवल संख्यात्मक कोड ही प्रेषित होता है। वे टूल जो HTTP/2 रिस्पॉन्स के लिए कोई फ़्रेज़ प्रदर्शित करते हैं, उसे इसी जैसी किसी टेबल से स्थानीय रूप से लुकअप कर रहे हैं।