जब HTTP अनुरोध स्थिति कोड 0 लौटाता है तो इसका क्या अर्थ है?


130

इसका क्या मतलब है जब जावास्क्रिप्ट नेटवर्क जैसे कि fetch या XMLHttpRequest, या किसी अन्य प्रकार का HTTP नेटवर्क अनुरोध कॉल करता है, 0 के HTTP स्थिति कोड के साथ विफल होता है?

यह एक मान्य HTTP स्थिति कोड प्रतीत नहीं होता है क्योंकि अन्य कोड HTTP विनिर्देशन में तीन अंक हैं।

मैंने परीक्षण के रूप में नेटवर्क को पूरी तरह से अनप्लग करने की कोशिश की। यह असंबंधित हो सकता है, लेकिन इसके परिणामस्वरूप स्थिति कोड 17003 (IIRC) है, जो कि सरसरी खोज का अर्थ है कि "DNS सर्वर लुकअप विफल" है।

समान कोड कुछ स्थानों और प्रणालियों से ठीक काम करता है, हालांकि कुछ वातावरणों के भीतर यह स्थिति कोड 0 के साथ विफल रहता है और कोई प्रतिक्रिया प्रदान नहीं की जाती है।

यह इंटरनेट URL के लिए एक विशिष्ट HTTP POST है। इसमें फ़ाइल शामिल नहीं है: // जो मैं समझता हूं कि फ़ायरफ़ॉक्स में सफलता का संकेत दे सकता है।


क्या यह फ़ायरवॉल के कारण हो सकता है? आपके ग्राहक किस OS पर ऐप चला रहे हैं?
शुक्लपक्ष

उपयोगी हो सकता है: stackoverflow.com/a/12622082/386579
shasi kant


मैं फ़ायरफ़ॉक्स में एक ही समस्या थी और पता चला कि एक विज्ञापन अवरोधक प्लगइन URLs के सभी अनुरोधों को रोकता है जिसमें शब्द शामिल हैंbanner
Jan

जवाबों:


56

मेरा मानना ​​है कि त्रुटि कोड इंगित करता है कि प्रतिक्रिया खाली थी, (जैसा कि हेडर भी नहीं लौटाए गए थे)। इसका मतलब यह है कि कनेक्शन को स्वीकार कर लिया गया था और फिर इसे शालीनता से (टीसीपी फाइनल) बंद कर दिया गया था। कई चीजें हैं जो इसका कारण बन सकती हैं, लेकिन आपके विवरण के आधार पर, फ़ायरवॉल का कुछ रूप सबसे संभावित अपराधी लगता है।


2
मुझे लगता है कि आप शायद सही हैं। (हालांकि, जैसा कि @sleepycod wininet.dll द्वारा बताया गया है, वास्तविक http स्थिति कोड की अनुपस्थिति में कुछ स्थिति कोड वापस करने की उम्मीद की जाएगी ।)
माइक नेल्सन

1
यह जरूरी सही नहीं है। मेरे पास भी यही समस्या है, लेकिन मेरे मामले में, एक अनुरोध कभी नहीं भेजा गया था। कारण यह था कि फ़ायरफ़ॉक्स विज्ञापन अवरोधक ने उन अनुरोधों को रोका जिनके URL में शब्द हैbanner
Jan

194

यहां बहुत से उत्तर गलत हैं। ऐसा लगता है कि लोगों को पता है कि उनके विशेष मामले में स्थिति == 0 का क्या कारण था और फिर उत्तर के रूप में इसे सामान्यीकृत करें।

व्यावहारिक रूप से, असफल XmlHttpRequest के लिए स्थिति == 0 को एक अपरिभाषित त्रुटि माना जाना चाहिए।

वास्तविक W3C कल्पना उन स्थितियों को परिभाषित करती है जिनके लिए शून्य यहां लौटाया गया है: https://fetch.spec.whatwg.org/#concept-network-error

जैसा कि आप युक्ति से प्राप्त कर सकते हैं (xmlHttpRequest) यह कोड एक त्रुटि का परिणाम हो सकता है जो सर्वर से संपर्क होने से पहले भी हुआ था।

इस स्थिति कोड को उत्पन्न करने वाली कुछ सामान्य स्थितियाँ अन्य उत्तरों में परिलक्षित होती हैं, लेकिन यह इन समस्याओं में से कोई भी हो सकती है:

  1. अवैध क्रॉस ओरिजिनल रिक्वेस्ट (देखें CORS )
  2. फ़ायरवॉल ब्लॉक या फ़िल्टरिंग
  3. अनुरोध स्वयं कोड में रद्द कर दिया गया था
  4. एक स्थापित ब्राउज़र एक्सटेंशन चीजों को मूक कर रहा है

ब्राउज़रों के लिए क्या उपयोगी होगा, इन स्थितियों में से अधिक के लिए विस्तृत त्रुटि रिपोर्टिंग प्रदान करने के लिए == 0 परिदृश्य। वास्तव में, कभी-कभी स्थिति == 0 एक सहायक कंसोल संदेश के साथ होगी, लेकिन अन्य में कोई अन्य जानकारी नहीं है।


4
फ़ायरफ़ॉक्स एडऑन नॉटस्क्रिप्ट बिना मान्यता प्राप्त होस्ट के XHR अनुरोध को रद्द कर सकता है।
इवान सोलेंटसेव

5
+ 1, यह सब सटीक है और "किसी प्रकार की त्रुटि हुई" व्यावहारिक व्याख्या है। कल्पना द्वारा दिए गए संभावित कारणों की एक व्यापक सूची में रुचि रखने वाले लोगों के लिए, मैंने stackoverflow.com/a/26451773/1709587 पर एक ब्रेकडाउन पोस्ट किया है ।
मार्क एमी

1
मार्क अमेरी द्वारा विस्तृत मामलों के कारण जो मुझे सबसे ज्यादा परेशान करता है, वह है कॉर्स केस। यदि त्रुटि प्रतिक्रिया के कारण cors सत्यापन को विफल करने का कारण बनती है, तो आपको http स्थिति के बजाय 0 स्थिति मिल जाएगी, क्योंकि जब cors सत्यापन विफल हो जाता है, तो प्रतिक्रिया सुलभ नहीं होती है। विशेष रूप से निराशा जब एक वेब एपीआई के रखरखाव और 503 से गुजरने का पता लगाने की कोशिश कर रहा है। यदि यह एपीआई रखरखाव के दौरान कोर का सम्मान नहीं करता है, तो आप 503 का पता लगाने में सक्षम नहीं होंगे, आपको सिर्फ 0 मिलेगा, जो कई अन्य कारणों से हो सकता है बातें।
Frédéric

कोर मुद्दा मैं सामना किया गया था: यदि आपका पृष्ठ शुरू में इसके माध्यम से लोड किया गया था और इसके विपरीत का उपयोग httpकरने पर विचार httpsकरें http। एक और शब्द ajax प्रदर्शन नहीं करते POSTके माध्यम से httpsकरता है, तो अपने पृष्ठ के माध्यम से पहुंच बनाई गई थी httpऔर प्रदर्शन नहीं करते ajax POSTके माध्यम से httpकरता है, तो अपने पृष्ठ initiallly द्वारा ही पहुंचा था https
विक्टर पोनमारेव

तुल्यकालिक अनुरोध 0 स्थिति पर अधिक सार्थक अपवाद
फेंकते हैं

35

इसके लायक क्या है, यह ब्राउज़र पर निर्भर करता है, jQuery- आधारित AJAX कॉल आपकी सफलता के कॉलबैक को HTTP स्थिति कोड के साथ 0. पर कॉल करेगी। हमने "0" का एक स्टेटस कोड पाया है, जिसका अर्थ है कि उपयोगकर्ता को पहले एक अलग पेज पर नेविगेट किया जाता है। AJAX कॉल पूरा हुआ।

जैसा कि आप उपयोग कर रहे हैं, वैसी तकनीक नहीं है, लेकिन किसी के लिए उपयोगी है।


हां, लोगों को शायद यह मुद्दा बहुत पसंद है, क्योंकि इस पेज पर 10,000 विचार हो चुके हैं।
माइक नेल्सन

या मुझे 25,000 विचार कहने चाहिए?
माइक नेल्सन

3
यह बहुत लायक है: यह वही है जो मेरे स्वचालित परीक्षणों में मिसफायरिंग था। आपका बहुत बहुत धन्यवाद!
अलेक्सांद्रेज़ेज़

अपवित्र नहीं क्योंकि यह "सही जवाब" है, लेकिन यह वही है जो मेरे मामले में हो रहा था।
जुआन मेंडेस

यह निश्चित रूप से होता है, लेकिन यह एकमात्र कारण नहीं है कि आपको त्रुटि कोड दिखाई देगा == 0. आप इसके उपयोगकर्ता को केवल नेविगेट करते हुए नहीं मान सकते हैं और इसलिए इस प्रकार के त्रुटि संदेशों को फ़िल्टर कर सकते हैं।
वाल

14

wininet.dll मानक और गैर-मानक स्थिति कोड दोनों को लौटाता है जो नीचे सूचीबद्ध हैं।

401 - Unauthorized file
403 - Forbidden file
404 - File Not Found
500 - some inclusion or functions may missed
200 - Completed

12002 - Server timeout
12029,12030, 12031 - dropped connections (either web server or DB server)
12152 - Connection closed by server.
13030 - StatusText properties are unavailable, and a query attempt throws an exception

स्थिति कोड "शून्य" के लिए, आप वेबसर्वर पर चलने वाले स्थानीय वेबपेज पर या बिना वेबसर्वर के एक अनुरोध करने की कोशिश कर रहे हैं?

XMLHttpRequest status = 0 और XMLHttpRequest statusText = अज्ञात आपकी मदद कर सकता है यदि आप वेबसर्वर पर अपनी स्क्रिप्ट नहीं चला रहे हैं।


कोड के लिए धन्यवाद। नहीं, यह एक स्थानीय अनुरोध नहीं है, यह इंटरनेट पर एक वेब सर्वर के लिए एक अनुरोध है, स्थानीय स्तर पर चल रहे vbscript से।
माइक नेल्सन

6

समाधान: हमने क्या किया

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

  1. हम अभी भी स्थानीय हार्ड डिस्क पर एक पाठ फ़ाइल में डेटा लिखते हैं जैसा कि हमने पहले किया था, एक एचटीए का उपयोग करके।

  2. जब उपयोगकर्ता "सर्वर पर डेटा वापस भेजें" पर क्लिक करता है, तो एचटीए डेटा में पढ़ता है और एक HTML पृष्ठ लिखता है जिसमें एक XML डेटा द्वीप (वास्तव में एक SCRIPT भाषा = XML स्क्रिप्ट ब्लॉक का उपयोग करने वाला डेटा) शामिल होता है।

  3. HTA ब्राउज़र में HTML पेज का लिंक लॉन्च करता है।

  4. HTML पेज में अब जावास्क्रिप्ट है जो डेटा को सर्वर (Microsoft.XMLHTTP का उपयोग करके) पोस्ट करता है।

आशा है कि यह किसी को भी इसी तरह की आवश्यकता के साथ मदद करता है। इस मामले में यह एक फ्लैश गेम था जिसका इस्तेमाल लैपटॉप पर ट्रेडशो में किया जाता था। हमारे पास कभी भी लैपटॉप तक पहुंच नहीं थी और इसे केवल ग्राहक को ईमेल कर सकते थे क्योंकि यह ट्रेडशो दूसरे देश में हो रहा था।


नमस्ते, मैं एक ऐसे ही मुद्दे की जांच कर रहा हूं जो उत्पादन में एक ग्राहक के लिए हो रहा है। आप कहते हैं कि आपके लिए समस्या फ़ायरवॉल के कारण हुई थी। क्या आपको याद है कि फ़ायरवॉल के कारण क्या प्रभाव था, या फ़ायरवॉल ऐसा करने के लिए क्या कर रहा था?
इब्राहिम नज्जर

5

0 का HTTP प्रतिक्रिया कोड इंगित करता है कि AJAX अनुरोध रद्द कर दिया गया था।

यह या तो एक टाइमआउट, XHR गर्भपात या अनुरोध पर स्टॉम्पवॉल से हो सकता है। एक टाइमआउट आम है, इसका मतलब है कि अनुरोध एक निर्दिष्ट समय के भीतर निष्पादित करने में विफल रहा। एक एक्सएचआर गर्भपात करना बहुत सरल है ... आप वास्तव में AJAX कॉल को रद्द करने के लिए XMLHttpRequest ऑब्जेक्ट पर .abort () कॉल कर सकते हैं। ( यदि आप AJAX कॉल को नष्ट नहीं करना चाहते हैं और नष्ट हो चुकी वस्तुओं को वापस करना चाहते हैं, तो यह एकल पृष्ठ अनुप्रयोग के लिए अच्छा अभ्यास है। ) जैसा कि चिह्नित उत्तर में उल्लेख किया गया है, एक फ़ायरवॉल भी अनुरोध को रद्द करने और इसे ट्रिगर करने में सक्षम होगा। 0 प्रतिक्रिया।

XHR गर्भपात: jQuery का उपयोग करके Ajax अनुरोधों को रद्द करें

var xhr = $.ajax({
    type: "POST",
    url: "some.php",
    data: "name=John&location=Boston",
    success: function(msg){
       alert( "Data Saved: " + msg );
    }
});

//kill the request
xhr.abort()

यह ध्यान देने योग्य है कि XHR ऑब्जेक्ट पर .abort () विधि को चलाने से त्रुटि कॉलबैक भी आग लग जाएगी। यदि आप इन ऑब्जेक्ट्स को हैंडल करने में किसी भी प्रकार की त्रुटि कर रहे हैं, तो आप जल्दी से ध्यान देंगे कि एक एक्सएचआर और एक टाइमआउट एक्सएचआर समान है, लेकिन jQuery के साथ टेक्स्ट कॉलैटस जो त्रुटि कॉलबैक को पारित किया जाता है, "एबॉर्टेड" होगा और टाइमआउट के साथ "टाइमआउट" होता है। यदि आप Zepto (jQuery के समान (बहुत समान)) का उपयोग कर रहे हैं, तो त्रुटि तब होगी जब "त्रुटि" को निरस्त किया जाएगा और समय समाप्त होने पर "टाइमआउट" किया जाएगा।

jQuery: error(jqXHR, textStatus, errorThrown);
Zepto:  error(xhr, errorType, error);

4

जैसा कि इस पृष्ठ पर इस उत्तर से विस्तृत है , 0 का एक स्थिति कोड का अर्थ है कि अनुरोध किसी कारण से विफल हो गया है, और एक जावास्क्रिप्ट पुस्तकालय ने 0 के स्थिति कोड के रूप में असफल की व्याख्या की।

इसका परीक्षण करने के लिए आप निम्नलिखित में से कोई भी कर सकते हैं:

1) इस क्रोम एक्सटेंशन का उपयोग करें, अपने url के संस्करण से अपने url को संस्करण में पुनर्निर्देशित करने का अनुरोध करें , क्योंकि यह एक मिश्रित सामग्री सुरक्षा त्रुटि का कारण होगा, और अंततः 0. की स्थिति कोड उत्पन्न करेगा। इस दृष्टिकोण का लाभ यह है कि आप डॉन टी को अपने ऐप को बिल्कुल बदलना होगा, और आप इस एक्सटेंशन का उपयोग करके अपने यूआरएल को बस फिर से लिख सकते हैं।httpshttp

2) अपने ऐप के कोड को वैकल्पिक रूप से अपने एंडपॉइंट httpको अपने यूआरएल के httpsसंस्करण (या इसके विपरीत) के बजाय पुनर्निर्देशित करने के लिए बदलें । यदि आप ऐसा करते हैं, तो अनुरोध स्थिति कोड 0 के साथ विफल हो जाएगा।


1
"इस क्रोम एक्सटेंशन का उपयोग करें" - एक क्रोम एक्सटेंशन? एक HTA आवेदन में?
क्वेंटिन

4
अच्छी बात पक्की! लेकिन यहां पहुंचने वाले ज्यादातर लोग HTA एप्लिकेशन के लिए यहां नहीं पहुंच रहे हैं। वे "जावास्क्रिप्ट http स्थिति कोड 0" या ऐसा कुछ कर रहे हैं, और यहां पहुंच रहे हैं - इसलिए मुझे लगता है कि इस सवाल का HTA हिस्सा कम से कम महत्व का है, कुल मिलाकर, और अंततः यह अभी भी प्रासंगिक है।
ब्रैड पार्क

2

मेरे मामले में स्थिति 0 बन गई जब मैं अपने डोमेन के सामने WWW रखना भूल जाऊंगा। क्योंकि मेरे सभी ajax अनुरोध हार्डकूटेड http: /WWW.mydomain.com थे और लोड किए गए वेबपेज में सिर्फ http://mydomain.com होगा क्योंकि यह एक अलग डोमेन होने के कारण यह एक सुरक्षा मुद्दा बन गया। मैंने अपनी .htaccess फ़ाइल में रीडायरेक्ट करने के लिए हमेशा www को सामने रखा।


1

मेरे मामले में, यह इसलिए था क्योंकि AJAX कॉल उसी मूल नीति के कारण ब्राउज़र द्वारा अवरुद्ध किया जा रहा था । यह कम से कम अपेक्षित चीज थी, क्योंकि मेरे सभी एचटीएमएल और स्क्रिप्ट जहां से परोसे जा रहे हैं 127.0.0.1। अलग-अलग मूल के होने पर उन्हें कैसे माना जा सकता है?

वैसे भी, मूल कारण एक निर्दोष दिखने वाला <base>टैग था:

<base href='<%=request.getScheme()%>://<%=request.getServerName() + ":" + request.getServerPort() + request.getContextPath()%>/'/>

मैंने <base>टैग को हटा दिया , जिसकी मुझे ज़रूरत नहीं थी, और अब यह ठीक काम करता है!


1

मुझे स्थिति के लिए एक नया और अनिर्दिष्ट कारण मिला == 0. यहाँ वही है जो मेरे पास था:

XMLHttpRequest.status === 0
XMLHttpRequest.readyState === 0
XMLHttpRequest.responseText === ''
XMLHttpRequest.state() === 'rejected'

यह क्रॉस-उत्पत्ति, नेटवर्क या रद्द किए गए अनुरोधों (कोड या उपयोगकर्ता नेविगेशन द्वारा) के कारण नहीं था। डेवलपर कंसोल या नेटवर्क लॉग में कुछ भी नहीं।

मैं राज्य पर बहुत कम प्रलेखन पा सकता था () (मोज़िला इसे सूचीबद्ध नहीं करता, डब्ल्यू 3 सी करता है) और इसमें से किसी ने भी "अस्वीकार" नहीं किया।

पता चला कि यह मेरा विज्ञापन अवरोधक था (फ़ायरफ़ॉक्स पर मूल उत्पत्ति)।


1

ली के जवाब के अलावा , आप वास्तविक कारणों के बारे में अधिक जानकारी समकालिक अनुरोधों पर स्विच करके पा सकते हैं , क्योंकि आपको इसका अपवाद भी मिलेगा:

function request(url) {
    var request = new XMLHttpRequest();
    try {
        request.open('GET', url, false);
        request.send(null);
    } catch (e) {
        console.log(url + ': ' + e);
    }
}

उदाहरण के लिए :

NetworkError: नेटवर्क त्रुटि हुई।


0

यदि कोई अन्य व्यक्ति इस समस्या को लेकर आता है, तो यह मुझे AJAX अनुरोध और सामान्य प्रपत्र अनुरोध भेजे जाने के कारण समस्याएँ दे रहा था। मैंने इसे निम्नलिखित पंक्ति के साथ हल किया:

<form onsubmit="submitfunc(); return false;">

वहाँ कुंजी झूठी है, जो फ़ॉर्म को नहीं भेजने का कारण बनती है। आप केवल सबमिटफंक () के अंदर से ही गलत रिटर्न कर सकते हैं, लेकिन मैं स्पष्ट रूप से इसे स्पष्ट होने के लिए लिख रहा हूं।


1
इसके लिए डिफ़ॉल्ट कार्यों को भी रोकें। यह एक जावास्क्रिप्ट फ़ंक्शन है जो ब्राउज़र को घटनाओं के दौरान डिफ़ॉल्ट व्यवहार को निष्पादित करने से रोकता है, जिससे आप बड़े करीने से ओवरराइड कर सकते हैं / देशी कार्यक्षमता को रोक सकते हैं ... गलत भी वही करता है।
कोरी डेनियलसन

0

यह ध्यान दिया जाना चाहिए कि client_max_body_sizeएनजैक्स के लिए निर्देश से अधिक एक अजाक्स फ़ाइल अपलोड इस त्रुटि कोड को वापस कर देगा।


0

यदि आप स्थानीय पीसी पर परीक्षण कर रहे हैं, तो यह काम नहीं करेगा। अजाक्स उदाहरण का परीक्षण करने के लिए आपको एक वेब सर्वर पर HTML फ़ाइलों को रखने की आवश्यकता है।


0

मेरे मामले में, HTTP प्रोटोकॉल के साथ अनुरोध किए गए पृष्ठ में त्रुटि हुई, उसके अंदर एक जावास्क्रिप्ट के साथ एक HTTPS अनुरोध करने की कोशिश कर रहा है। और इसके विपरीत।

पृष्ठ लोड होने के बाद, F12 (या Ctrl + U) दबाएं और अपने पृष्ठ के HTML कोड पर एक नज़र डालें। यदि आप अपने कोड में ऐसा कुछ देखते हैं:

<!-- javascript request inside the page -->
<script>
var ajaxurl = "https://example.com/wp-admin/admin-ajax.php";
(...)
</script>

और आपका पेज इस तरह से अनुरोध किया गया था:

http://example.com/example-page/2019/09/13/my-post/#elf_l1_Lw

आप निश्चित रूप से इस त्रुटि का सामना करेंगे।

इसे ठीक करने के लिए, जावास्क्रिप्ट अनुरोध को पेज अनुरोध के प्रोटोकॉल के बराबर सेट करें।

पेज और जेएस अनुरोधों के लिए अलग-अलग प्रोटोकॉल वाली यह स्थिति ब्रैड पार्क्स के उत्तर में पहले उल्लेखित की गई थी , लेकिन मुझे लगता है कि यहां प्रस्तुत नैदानिक ​​तकनीक उपयोगकर्ताओं के बहुमत के लिए आसान है।

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