अब तक के सभी उत्तर या तो सरलीकृत, अपूर्ण या आंशिक रूप से गलत प्रतीत होते हैं (विषय जटिल है, चीजों को भ्रमित नाम दिया गया है और अच्छी तरह से प्रलेखित नहीं है!), इसलिए यहां मेरी समझ है:
द्वारा बनाए गए कनेक्शन का पुन: उपयोग करने में सक्षम होने के लिए <link rel=preconnect>
, चीजें इस बात पर निर्भर करती हैं कि आप किस तरह की सामग्री लाना चाहते हैं, कहां से, क्या अनुरोध ब्राउज़र क्रेडेंशियल्स भेज देगा (जो कि स्पष्ट रूप से या अंतर्निहित रूप से ब्राउज़र द्वारा स्थापित किया जा सकता है):
अनुरोध समान-मूल है ( example.com
अनुरोध सब - सोर्स से example.com
)
preconnect
पहली जगह में सभी के लिए कोई ज़रूरत नहीं है; ब्राउज़र काफी समय तक पेज लोड करने के बाद कनेक्शन को खुला रखता है। यदि कई कनेक्शन खोले जाने हैं, तो ब्राउज़र स्वयं ही यह तय कर लेता है कि क्या और कितने को खोलना है (यदि सर्वर TLS हैंडशेक, ब्राउज़र सेटिंग्स आदि में HTTP / 2 समर्थन की घोषणा करता है)
जाँच की जा सकती है : क्या होगा यदि समान-मूल अनुरोध में crossorigin
विशेषता है: क्या इसका उपयोग या अनदेखा किया गया है?
अनुरोध क्रॉस-example.com
ऑरिजिनल है ( अनुरोध सब - सोर्स से another.com
)
- यदि वास्तविक अनुरोध किया है
crossorigin
विशेषता स्पष्ट रूप से सेट HTML में ( crossOrigin
जे एस में - मामला महत्वपूर्ण है), प्रीकनेक्ट भी यह होना आवश्यक है, एक ही मूल्य के साथ (शायद मामलों को छोड़कर जहां यह मतलब नहीं है और crossorigin
नजरअंदाज कर दिया है - पूरी तरह से के लिए स्पष्ट नहीं मुझे अभी तक)
- और, यदि अनुरोध हो तो
<script type=module>
: जाँच की जाए
- बाकी, यदि अनुरोध है और के लिए "पुराने स्कूल" अनुरोध
<img>
, <style type=stylesheet>
, <iframe>
, क्लासिक <script>
आदि (HTML या जे एस के माध्यम से शुरू) के बिना crossorigin
स्पष्ट रूप से निर्दिष्ट है, तो प्रीकनेक्ट चाहिए नहीं crossorigin
विशेषता सेट।
- और, यदि अनुरोध एक क्रॉस- ऑरिजनल फॉन्ट रिक्वेस्ट है, तो प्री - कनेक्ट होना चाहिए
crossorigin=anonymous
- और, यदि अनुरोध एक क्रॉस-मूल है
fetch
या XHR
:
- अगर यह क्रेडेंशियल मोड में किया जाता है (यानी कुकीज़ संलग्न हैं या HTTP बेसिक कोर का उपयोग किया जाता है, तो भ्रूण के
credentials !== omit
मामले में , इसका मतलब है ; XHR के मामले में withCredentials === true
:): प्री-कनेक्ट होना चाहिएcrossorigin=use-credentials
- अगर यह क्रेडेंशियल मोड में नहीं है: प्री-कनेक्ट होना चाहिए
crossorigin=anonymous
अंतिम स्थिति (लाने / एक्सएचआर) के लिए, Chrome / Firefox devtools में नेटवर्क पैनल पर जाएं, एक अनुरोध पर राइट क्लिक करें, और copy as fetch
एक ड्रॉपडाउन से चुनें । यह जेएस का एक स्निपेट बनाएगा, जो आपको बताएगा कि क्या अनुरोध कोर-सक्षम ( "mode"=="cors"
) और क्रेडेंशियल ( "credentials"=="include"|"same-origin"
) है।
ध्यान दें, हालांकि ऊपर दी गई ट्रिक नॉन-एक्सएचआर / भ्रूण अनुरोधों के लिए सही ढंग से काम नहीं करती है, क्योंकि उदाहरण के लिए fetch
और <img>
कनेक्शन स्थापित करने के लिए विभिन्न एल्गोरिदम का उपयोग करें, जैसा कि पहले बताया गया है।
अंत में, HTML में, <link ...crossorigin>
=== <link ...crossorigin=anonymous>
।
अतिरिक्त नोट्स और लिंक: