क्या HTTP स्थिति कोड 0 का कोई अर्थ है?


91

ऐसा प्रतीत होता है कि जब आप किसी ब्राउज़र में एक स्क्रिप्ट से XMLHttpRequest बनाते हैं, यदि ब्राउज़र ऑफ़लाइन काम करने के लिए सेट किया गया है या यदि नेटवर्क केबल बाहर निकाला जाता है, तो अनुरोध त्रुटि के साथ पूरा होता है और स्टेटस के साथ = 0. 0 अनुमेय के बीच सूचीबद्ध नहीं होता है HTTP स्थिति कोड।

0 की स्थिति कोड का क्या अर्थ है? क्या इसका मतलब सभी ब्राउज़रों और सभी HTTP क्लाइंट उपयोगिताओं के लिए समान है? क्या यह HTTP कल्पना का हिस्सा है या यह किसी अन्य प्रोटोकॉल युक्ति का हिस्सा है? ऐसा लगता है कि HTTP अनुरोध बिल्कुल नहीं किया जा सकता है, शायद इसलिए कि सर्वर का पता हल नहीं किया जा सकता है।

उपयोगकर्ता को दिखाने के लिए कौन सा त्रुटि संदेश उपयुक्त है? "या तो आप इंटरनेट से नहीं जुड़े हैं, या वेबसाइट समस्याओं का सामना कर रही है, या पते में कोई टाइपिंग त्रुटि हो सकती है"?

मुझे यह जोड़ना चाहिए कि मैं "काम ऑफ़लाइन" पर सेट होने पर फ़ायरफ़ॉक्स में व्यवहार देखता हूं, लेकिन "काम ऑफ़लाइन" पर सेट होने पर Microsoft इंटरनेट एक्सप्लोरर में नहीं। IE में, उपयोगकर्ता को ऑनलाइन जाने का विकल्प देने वाला एक संवाद मिलता है। फ़ायर्फ़ॉक्स त्रुटि को वापस करने से पहले उपयोगकर्ता को सूचित नहीं करता है।

मैं इसे "एक बेहतर त्रुटि संदेश दिखाने" के अनुरोध के जवाब में पूछ रहा हूं। Internet Explorer क्या करता है अच्छा है। यह उपयोगकर्ता को बताता है कि समस्या क्या है और उन्हें इसे ठीक करने का विकल्प देता है। फ़ायरफ़ॉक्स के साथ एक बराबर यूएक्स देने के लिए मुझे समस्या का कारण जानने और उपयोगकर्ता को सूचित करने की आवश्यकता है। तो स्टेटस 0 से कुल मिलाकर मैं क्या अनुमान लगा सकता हूं? क्या इसका कोई सार्वभौमिक अर्थ है या यह मुझे कुछ नहीं बताता है?


कृपया इस प्रश्न को देखें, जिसमें एक ही विषय शामिल है: stackoverflow.com/questions/872206/…
स्कॉट स्टाफ़र्ड

3
मेरा मानना ​​है कि यह सबसे सटीक उत्तर है: stackoverflow.com/a/14507670/700206
वाइटनीलैंड

एक अन्य संबंधित पोस्ट - HTTP स्थिति कोड 0 का क्या अर्थ है
RBT

जवाबों:


153

संक्षिप्त जवाब

यह एक HTTP प्रतिक्रिया कोड नहीं है, लेकिन यह व्हाट्सएप द्वारा एक XMLHttpRequestया फ़िश प्रतिक्रिया की स्थिति विशेषता के लिए एक मान्य मूल्य के रूप में प्रलेखित है ।

मोटे तौर पर, यह एक डिफ़ॉल्ट मूल्य है जिसका उपयोग तब किया जाता है जब रिपोर्ट करने के लिए कोई वास्तविक HTTP स्थिति कोड नहीं होता है और / या एक त्रुटि अनुरोध भेजने या प्रतिक्रिया प्राप्त करने में होती है। संभावित परिदृश्य जहां यह मामला शामिल है, लेकिन यह तक सीमित नहीं है:

  • अनुरोध अभी तक नहीं भेजा गया है, या निरस्त कर दिया गया था।
  • ब्राउज़र अभी भी प्रतिक्रिया की स्थिति और हेडर प्राप्त करने के लिए इंतजार कर रहा है।
  • अनुरोध के दौरान कनेक्शन गिरा दिया गया।
  • अनुरोध का समय समाप्त हुआ।
  • अनुरोध में एक अनंत अनुप्रेषित लूप था।
  • ब्राउज़र प्रतिक्रिया स्थिति जानता है, लेकिन आपको समान-मूल नीति से संबंधित सुरक्षा प्रतिबंधों के कारण इसे एक्सेस करने की अनुमति नहीं है ।

लंबा जवाब

सबसे पहले, पुनरावृत्ति करने के लिए: 0 एक HTTP स्थिति कोड नहीं है। RFC 7231 धारा 6.1 में उनकी पूरी सूची है , जिसमें 0 शामिल नहीं है, और खंड 6 राज्यों में परिचय स्पष्ट रूप से है कि

स्थिति-कोड तत्व एक तीन-अंकीय पूर्णांक कोड है

जो 0 नहीं है।

हालांकि, .statusXMLHttpRequest ऑब्जेक्ट की विशेषता के मान के रूप में 0 का दस्तावेजीकरण किया गया है, हालांकि सभी प्रासंगिक विवरणों को ट्रैक करने के लिए यह थोड़ा मुश्किल है। हम https://xhr.spec.whatwg.org/#the-status-attribute पर शुरू करते हैं .status, जो उस विशेषता का दस्तावेजीकरण करते हैं, जिसमें बस कहा गया है:

statusविशेषता लौटना चाहिए प्रतिक्रिया की स्थिति

यह सुनने में अटपटा और तनावरहित लग सकता है, लेकिन वास्तव में यहाँ जानकारी है! याद रखें कि यह प्रलेखन किसी प्रतिक्रिया की .responseविशेषता के बारे में यहाँ बात कर रहा है XMLHttpRequest, इसलिए यह हमें बताता है कि एक्सएचआर ऑब्जेक्ट पर स्थिति की परिभाषा को फेच युक्ति में एक प्रतिक्रिया की स्थिति की परिभाषा के लिए स्थगित कर दिया गया है।

लेकिन क्या प्रतिक्रिया वस्तु? यदि हमें वास्तव में अभी तक कोई प्रतिक्रिया नहीं मिली है तो क्या होगा? "प्रतिक्रिया" शब्द पर इनलाइन लिंक हमें https://xhr.spec.whatwg.org/#response पर ले जाता है , जो बताता है:

एक XMLHttpRequestसंबंधित प्रतिक्रिया है। जब तक अन्यथा न कहा जाए तो यह एक नेटवर्क त्रुटि है

तो प्रतिक्रिया जिसकी स्थिति हमें मिल रही है वह डिफ़ॉल्ट रूप से एक नेटवर्क त्रुटि है। और हर जगह खोज के लिए वाक्यांश "सेट प्रतिक्रिया" का उपयोग एक्सएचआर कल्पना में किया जाता है, हम देख सकते हैं कि यह पांच स्थानों पर सेट है:

में खोज रहे हैं लायें मानक , हम देख सकते हैं कि:

एक नेटवर्क त्रुटि एक प्रतिक्रिया है जिसकी स्थिति हमेशा होती है0

इसलिए हम तुरंत बता सकते हैं कि हम किसी भी स्थिति में XHR ऑब्जेक्ट पर 0 की स्थिति देखेंगे जहां XHR कल्पना कहती है कि प्रतिक्रिया नेटवर्क त्रुटि पर सेट होनी चाहिए। (दिलचस्प बात यह है कि इसमें वह मामला भी शामिल है जहाँ शरीर की धारा "त्रुटिपूर्ण" हो जाती है, जो हमें बताती है कि शरीर की पार्स के दौरान हो सकती है स्थिति प्राप्त बाद - इसलिए सिद्धांत रूप में मुझे लगता है कि XHR ऑब्जेक्ट के लिए यह संभव है 200 पर सेट करें, फिर शरीर को प्राप्त करते समय एक आउट-ऑफ-मेमोरी त्रुटि या कुछ और मुठभेड़ करें और इसलिए इसकी स्थिति वापस बदलकर 0.) करें

हम फ़ेच मानक में यह भी ध्यान देते हैं कि कुछ अन्य प्रकार की प्रतिक्रियाएँ मौजूद हैं जिनकी स्थिति 0 बताई गई है, जिनका अस्तित्व क्रॉस-ऑरिज रिक्वेस्ट और समान-मूल नीति से संबंधित है:

एक अपारदर्शी फ़िल्टर्ड प्रतिक्रिया एक फ़िल्टर्ड प्रतिक्रिया है जिसकी ... स्थिति है 0...

एक अपारदर्शी-पुनर्निर्देशित फ़िल्टर की गई प्रतिक्रिया एक फ़िल्टर्ड प्रतिक्रिया है जिसकी ... स्थिति है 0...

(इन दो प्रतिक्रिया प्रकारों के बारे में विभिन्न अन्य विवरण छोड़े गए)।

लेकिन इन सबसे परे, ऐसे कई मामले भी हैं जहाँ फ़ॉस्च एल्गोरिथ्म (एक्सएचआर कल्पना के बजाय, जिसे हमने पहले ही देखा है) एक नेटवर्क त्रुटि को वापस करने के लिए ब्राउज़र के लिए कॉल करता है! वास्तव में, वाक्यांश "एक नेटवर्क त्रुटि लौटाता है" फ़ेच मानक में 40 बार दिखाई देता है । मैं यहां सभी 40 को सूचीबद्ध करने की कोशिश नहीं करूंगा, लेकिन मैं ध्यान देता हूं कि इनमें शामिल हैं:

  • वह मामला जहां अनुरोध की योजना को मान्यता नहीं दी गई है (उदाहरण के लिए madeupscheme पर अनुरोध भेजने की कोशिश कर रहा है: //foar.com)
  • आश्चर्यजनक रूप से अस्पष्ट निर्देश "जब संदेह हो, तो नेटवर्क त्रुटि लौटाएं।" एफ़टीपी से निपटने के लिए एल्गोरिदम में: // और फ़ाइल: // यूआरएल
  • अनंत पुनर्निर्देश: "यदि अनुरोध का पुनर्निर्देशन बीस है, तो नेटवर्क त्रुटि वापस करें।"
  • कोर से संबंधित मुद्दों का एक गुच्छा, जैसे कि "यदि httpRequest की प्रतिक्रिया में छेड़छाड़ नहीं हुई है" cors "और अनुरोध और प्रतिक्रिया के साथ क्रॉस-ऑरिजनल रिसोर्स पॉलिसी की जाँच अवरुद्ध हो जाती है, तो नेटवर्क त्रुटि वापस करें।"
  • कनेक्शन विफलताओं: "यदि कनेक्शन विफलता है, तो नेटवर्क त्रुटि लौटाएं।"

दूसरे शब्दों में: जब भी कुछ गलत हो जाता अन्य एक 500 या 400 सर्वर से की तरह एक असली HTTP त्रुटि स्थिति कोड प्राप्त करने से, आप अपने एक्सएचआर वस्तु पर 0 से स्थिति विशेषता के साथ समाप्त या ब्राउज़र में प्रतिक्रिया ऑब्जेक्ट लायें। कल्पना में संभावित संभावित कारणों की संख्या बहुत बड़ी है।

अंत में: यदि आप किसी कारण से कल्पना के इतिहास में रुचि रखते हैं, तो ध्यान दें कि यह उत्तर 2020 में पूरी तरह से फिर से लिखा गया था, और इस उत्तर के पिछले संशोधन में आपकी रुचि हो सकती है , जो अनिवार्य रूप से उसी निष्कर्ष से बाहर निकलता है। XHR के लिए पुराने (और बहुत सरल) W3 युक्ति, इससे पहले कि वे अधिक आधुनिक और अधिक जटिल व्हाट्सएप द्वारा प्रतिस्थापित किए गए थे, इस उत्तर को संदर्भित करता है।


53

स्टेटस 0 तब दिखाई देता है जब पेज को रिफ्रेश करके या अप्राप्य URL की रिक्वेस्ट प्राप्त करने से पहले अजाक्स कॉल को रद्द कर दिया जाता था।

यह स्थिति प्रलेखित नहीं है, लेकिन गैजेट से।


4
नमस्कार, क्या विफल ("नेटवर्क नहीं") और रद्द किए गए अनुरोध के बीच अंतर करने का कोई तरीका है?
अंकुर

2
इस स्थिति को XmlHttpRequest स्थिति के रूप में प्रलेखित किया जाता है। बेशक यह एक http स्थिति नहीं है, लेकिन यह प्रलेखित है। w3.org/TR/XMLHttpRequest/#the-status-attribute अधिक विवरण के लिए मार्क अमेरी प्रतिक्रिया देखें।
Frédéric


4

जानिए यह एक पुरानी पोस्ट है। लेकिन ये मुद्दे अभी भी मौजूद हैं।

यहाँ इस विषय पर मेरे कुछ निष्कर्ष दिए गए हैं, जिन्हें पूरी तरह से समझाया गया है।

XMLHttpRequest कल्पना के अनुसार "स्थिति" 0 का अर्थ 3 चीजों में से एक है:

  • dns नाम रिज़ॉल्यूशन विफल रहा (उदाहरण के लिए जब नेटवर्क प्लग निकाला जाता है)

  • सर्वर ने जवाब नहीं दिया (उर्फ अप्राप्य या अनुत्तरित)

  • अनुरोध एक CORS समस्या के कारण निरस्त किया गया था (गर्भपात उपयोगकर्ता-एजेंट द्वारा किया जाता है और एक असफल विकल्प पूर्व-उड़ान का अनुसरण करता है)।

यदि आप आगे जाना चाहते हैं, तो XMLHttpRequest के इनर में गहरा गोता लगाएँ। मेरा सुझाव है कि रेडी-स्टेट अपडेट अनुक्रम पढ़ना ([0,1,2,3,4] सामान्य अनुक्रम है, [0,1,4] स्थिति 0 से मेल खाता है, [0,1,2,4] का अर्थ है कोई सामग्री नहीं) भेजा गया जो एक त्रुटि हो सकती है या नहीं)। आप विवरण निकालने के लिए श्रोताओं को xhr (onreadystatechange, onabort, onerror, ontimeout) पर संलग्न करना चाह सकते हैं।

कल्पना ( XHR लिविंग स्पेक) से ):

const unsigned short UNSENT = 0;
const unsigned short OPENED = 1;
const unsigned short HEADERS_RECEIVED = 2;
const unsigned short LOADING = 3;
const unsigned short DONE = 4;

1
यहां आपकी सूची के सभी संभावित कारण सही हैं, लेकिन आपकी सूची संपूर्ण नहीं है। उदाहरण के लिए, आप मेरे जवाब में विस्तृत समय-सीमा, अनंत अनुप्रेषित छोरों और अन्य कारणों को याद कर रहे हैं । हालाँकि, नए जीवित XHR युक्ति के लिए सूचक उपयोगी है; मुझे अपने उत्तर को उद्धृत करने के लिए अद्यतन करना चाहिए कि पुराने W3 युक्ति के बजाय।
मार्क ऐमी

0

IOS 9 के बाद से, आपको गैर-सुरक्षित HTTP वेब सेवा के लिए अनुरोध करने से पहले अपनी जानकारी के लिए "App Transport Security Settings" को अपनी info.plist फ़ाइल में जोड़ने और "अनुमति दें" को अनुमति दें। मेरी एक ऐप में यह समस्या थी।


-1

हाँ, कुछ कैसे अजाक्स कॉल निरस्त कर दिया। कारण निम्नलिखित हो सकता है।

  1. अजाक्स अनुरोध पूरा होने से पहले, उपयोगकर्ता ने अन्य पृष्ठ पर नेविगेट किया।
  2. अजाक्स अनुरोध समयबाह्य है।
  3. सर्वर किसी भी प्रतिक्रिया को वापस करने में सक्षम नहीं है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.