संक्षिप्त जवाब
यह एक HTTP प्रतिक्रिया कोड नहीं है, लेकिन यह व्हाट्सएप द्वारा एक XMLHttpRequest
या फ़िश प्रतिक्रिया की स्थिति विशेषता के लिए एक मान्य मूल्य के रूप में प्रलेखित है ।
मोटे तौर पर, यह एक डिफ़ॉल्ट मूल्य है जिसका उपयोग तब किया जाता है जब रिपोर्ट करने के लिए कोई वास्तविक HTTP स्थिति कोड नहीं होता है और / या एक त्रुटि अनुरोध भेजने या प्रतिक्रिया प्राप्त करने में होती है। संभावित परिदृश्य जहां यह मामला शामिल है, लेकिन यह तक सीमित नहीं है:
- अनुरोध अभी तक नहीं भेजा गया है, या निरस्त कर दिया गया था।
- ब्राउज़र अभी भी प्रतिक्रिया की स्थिति और हेडर प्राप्त करने के लिए इंतजार कर रहा है।
- अनुरोध के दौरान कनेक्शन गिरा दिया गया।
- अनुरोध का समय समाप्त हुआ।
- अनुरोध में एक अनंत अनुप्रेषित लूप था।
- ब्राउज़र प्रतिक्रिया स्थिति जानता है, लेकिन आपको समान-मूल नीति से संबंधित सुरक्षा प्रतिबंधों के कारण इसे एक्सेस करने की अनुमति नहीं है ।
लंबा जवाब
सबसे पहले, पुनरावृत्ति करने के लिए: 0 एक HTTP स्थिति कोड नहीं है। RFC 7231 धारा 6.1 में उनकी पूरी सूची है , जिसमें 0 शामिल नहीं है, और खंड 6 राज्यों में परिचय स्पष्ट रूप से है कि
स्थिति-कोड तत्व एक तीन-अंकीय पूर्णांक कोड है
जो 0 नहीं है।
हालांकि, .status
XMLHttpRequest ऑब्जेक्ट की विशेषता के मान के रूप में 0 का दस्तावेजीकरण किया गया है, हालांकि सभी प्रासंगिक विवरणों को ट्रैक करने के लिए यह थोड़ा मुश्किल है। हम https://xhr.spec.whatwg.org/#the-status-attribute पर शुरू करते हैं .status
, जो उस विशेषता का दस्तावेजीकरण करते हैं, जिसमें बस कहा गया है:
status
विशेषता लौटना चाहिए प्रतिक्रिया की स्थिति ।
यह सुनने में अटपटा और तनावरहित लग सकता है, लेकिन वास्तव में यहाँ जानकारी है! याद रखें कि यह प्रलेखन किसी प्रतिक्रिया की .response
विशेषता के बारे में यहाँ बात कर रहा है XMLHttpRequest
, इसलिए यह हमें बताता है कि एक्सएचआर ऑब्जेक्ट पर स्थिति की परिभाषा को फेच युक्ति में एक प्रतिक्रिया की स्थिति की परिभाषा के लिए स्थगित कर दिया गया है।
लेकिन क्या प्रतिक्रिया वस्तु? यदि हमें वास्तव में अभी तक कोई प्रतिक्रिया नहीं मिली है तो क्या होगा? "प्रतिक्रिया" शब्द पर इनलाइन लिंक हमें https://xhr.spec.whatwg.org/#response पर ले जाता है , जो बताता है:
एक XMLHttpRequest
संबंधित प्रतिक्रिया है। जब तक अन्यथा न कहा जाए तो यह एक नेटवर्क त्रुटि है ।
तो प्रतिक्रिया जिसकी स्थिति हमें मिल रही है वह डिफ़ॉल्ट रूप से एक नेटवर्क त्रुटि है। और हर जगह खोज के लिए वाक्यांश "सेट प्रतिक्रिया" का उपयोग एक्सएचआर कल्पना में किया जाता है, हम देख सकते हैं कि यह पांच स्थानों पर सेट है:
नेटवर्क त्रुटि के लिए, जब:
Fetch का उपयोग करके अनुरोध भेजने से उत्पन्न प्रतिक्रिया के लिए, या तो Fetch प्रक्रिया प्रतिसाद कार्य (यदि XHR अनुरोध समवर्ती है) या Fetch प्रक्रिया प्रतिसाद अंत-निकाय कार्य (यदि XHR अनुरोध समकालिक है) के माध्यम से।
में खोज रहे हैं लायें मानक , हम देख सकते हैं कि:
एक नेटवर्क त्रुटि एक प्रतिक्रिया है जिसकी स्थिति हमेशा होती है0
इसलिए हम तुरंत बता सकते हैं कि हम किसी भी स्थिति में XHR ऑब्जेक्ट पर 0 की स्थिति देखेंगे जहां XHR कल्पना कहती है कि प्रतिक्रिया नेटवर्क त्रुटि पर सेट होनी चाहिए। (दिलचस्प बात यह है कि इसमें वह मामला भी शामिल है जहाँ शरीर की धारा "त्रुटिपूर्ण" हो जाती है, जो हमें बताती है कि शरीर की पार्स के दौरान हो सकती है स्थिति प्राप्त बाद - इसलिए सिद्धांत रूप में मुझे लगता है कि XHR ऑब्जेक्ट के लिए यह संभव है 200 पर सेट करें, फिर शरीर को प्राप्त करते समय एक आउट-ऑफ-मेमोरी त्रुटि या कुछ और मुठभेड़ करें और इसलिए इसकी स्थिति वापस बदलकर 0.) करें
हम फ़ेच मानक में यह भी ध्यान देते हैं कि कुछ अन्य प्रकार की प्रतिक्रियाएँ मौजूद हैं जिनकी स्थिति 0 बताई गई है, जिनका अस्तित्व क्रॉस-ऑरिज रिक्वेस्ट और समान-मूल नीति से संबंधित है:
एक अपारदर्शी फ़िल्टर्ड प्रतिक्रिया एक फ़िल्टर्ड प्रतिक्रिया है जिसकी ... स्थिति है 0
...
एक अपारदर्शी-पुनर्निर्देशित फ़िल्टर की गई प्रतिक्रिया एक फ़िल्टर्ड प्रतिक्रिया है जिसकी ... स्थिति है 0
...
(इन दो प्रतिक्रिया प्रकारों के बारे में विभिन्न अन्य विवरण छोड़े गए)।
लेकिन इन सबसे परे, ऐसे कई मामले भी हैं जहाँ फ़ॉस्च एल्गोरिथ्म (एक्सएचआर कल्पना के बजाय, जिसे हमने पहले ही देखा है) एक नेटवर्क त्रुटि को वापस करने के लिए ब्राउज़र के लिए कॉल करता है! वास्तव में, वाक्यांश "एक नेटवर्क त्रुटि लौटाता है" फ़ेच मानक में 40 बार दिखाई देता है । मैं यहां सभी 40 को सूचीबद्ध करने की कोशिश नहीं करूंगा, लेकिन मैं ध्यान देता हूं कि इनमें शामिल हैं:
- वह मामला जहां अनुरोध की योजना को मान्यता नहीं दी गई है (उदाहरण के लिए madeupscheme पर अनुरोध भेजने की कोशिश कर रहा है: //foar.com)
- आश्चर्यजनक रूप से अस्पष्ट निर्देश "जब संदेह हो, तो नेटवर्क त्रुटि लौटाएं।" एफ़टीपी से निपटने के लिए एल्गोरिदम में: // और फ़ाइल: // यूआरएल
- अनंत पुनर्निर्देश: "यदि अनुरोध का पुनर्निर्देशन बीस है, तो नेटवर्क त्रुटि वापस करें।"
- कोर से संबंधित मुद्दों का एक गुच्छा, जैसे कि "यदि httpRequest की प्रतिक्रिया में छेड़छाड़ नहीं हुई है" cors "और अनुरोध और प्रतिक्रिया के साथ क्रॉस-ऑरिजनल रिसोर्स पॉलिसी की जाँच अवरुद्ध हो जाती है, तो नेटवर्क त्रुटि वापस करें।"
- कनेक्शन विफलताओं: "यदि कनेक्शन विफलता है, तो नेटवर्क त्रुटि लौटाएं।"
दूसरे शब्दों में: जब भी कुछ गलत हो जाता अन्य एक 500 या 400 सर्वर से की तरह एक असली HTTP त्रुटि स्थिति कोड प्राप्त करने से, आप अपने एक्सएचआर वस्तु पर 0 से स्थिति विशेषता के साथ समाप्त या ब्राउज़र में प्रतिक्रिया ऑब्जेक्ट लायें। कल्पना में संभावित संभावित कारणों की संख्या बहुत बड़ी है।
अंत में: यदि आप किसी कारण से कल्पना के इतिहास में रुचि रखते हैं, तो ध्यान दें कि यह उत्तर 2020 में पूरी तरह से फिर से लिखा गया था, और इस उत्तर के पिछले संशोधन में आपकी रुचि हो सकती है , जो अनिवार्य रूप से उसी निष्कर्ष से बाहर निकलता है। XHR के लिए पुराने (और बहुत सरल) W3 युक्ति, इससे पहले कि वे अधिक आधुनिक और अधिक जटिल व्हाट्सएप द्वारा प्रतिस्थापित किए गए थे, इस उत्तर को संदर्भित करता है।