एक अपारदर्शी प्रतिक्रिया क्या है, और यह किस उद्देश्य से काम करती है?


172

मैंने fetchएक पुरानी वेबसाइट के URL की कोशिश की , और एक त्रुटि हुई:

Fetch API cannot load http://xyz.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://abc' is therefore not allowed access.
If an opaque response serves your needs, set the request's mode to 'no-cors'
to fetch the resource with CORS disabled.

मैंने संदेश को समझा, और एक ऐसा अनुरोध करने का प्रयास किया जो एक अपारदर्शी प्रतिक्रिया देता है:

fetch("http://xyz", {'mode': 'no-cors'})

ठीक है, अब यह काम करता है ... लेकिन मैं इसे नहीं पढ़ सकता। = \

फिर एक अपारदर्शी प्रतिक्रिया का उद्देश्य क्या है?

जवाबों:


149

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

यह वही है जिसके { mode: 'no-cors' }लिए बनाया गया था।


2
लेकिन Status codeयह हमेशा होता है 0, अगर यह सफल रहा तो कैसे जांचें status is never 200?
अंशुमान अग्रवाल

3
आप नहीं कर सकते। यह ब्लैकबॉक्स का हिस्सा है ।
सलवा

67

Opaque प्रतिक्रियाओं को जावास्क्रिप्ट द्वारा एक्सेस नहीं किया जा सकता है, लेकिन आप अभी भी उन्हें कैश एपीआई के साथ कैश कर सकते हैं और fetchएक सेवा कार्यकर्ता में इवेंट हैंडलर में उनके साथ जवाब दे सकते हैं । इसलिए वे आपके ऐप को ऑफ़लाइन बनाने के लिए उपयोगी हैं, उन संसाधनों के लिए भी जिन्हें आप नियंत्रित नहीं कर सकते हैं (जैसे कि CDN पर संसाधन जो CORS हेडर सेट नहीं करते हैं)।


1

इसमें नोड जेएस ऐप का भी समाधान है। कहीं भी एक NodeJS प्रॉक्सी है, जो अनुमानित अनुरोध में कोर्स हेडर जोड़ता है।

प्रॉक्सी के लिए यूआरएल वस्तुतः पथ से लिया गया है, मान्य और अनुमानित है। अनुमानित URI का प्रोटोकॉल भाग वैकल्पिक है, और "http" को डिफॉल्ट करता है। यदि पोर्ट 443 निर्दिष्ट किया गया है, तो प्रोटोकॉल "https" में चूक जाता है।

यह पैकेज कुकीज़ को छोड़कर, http तरीकों या शीर्ष लेखों पर कोई प्रतिबंध नहीं लगाता है। उपयोगकर्ता क्रेडेंशियल्स का अनुरोध करना बंद है। एप्लिकेशन को एक अनुरोध के लिए हेडर की आवश्यकता के लिए कॉन्फ़िगर किया जा सकता है, उदाहरण के लिए ब्राउज़र से प्रत्यक्ष यात्रा से बचने के लिए। https://robwu.nl/cors-anywhere.html


-2

जावास्क्रिप्ट का जवाब मिलना थोड़ा मुश्किल है, मैंने इसे बैकएंड से एपी को प्राप्त करके और फिर इसे फ्रंटेंड पर कॉल करके तय किया।

public function get_typechange () {

    $ url = "https://........";
    $ json = file_get_contents ($url);
    $ data = json_decode ($ json, true);
    $ resp = json_encode ($data);
    $ error = json_last_error_msg ();
    return $ resp;

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