"सेम-साइट" और "एक ही ऑरिजिन" के बारे में अक्सर बताया जाता है, लेकिन अक्सर इनका गलत मतलब निकाला जाता है. उदाहरण के लिए, इनका इस्तेमाल पेज ट्रांज़िशन, fetch()
अनुरोध, कुकी, पॉप-अप खोलने, एम्बेड किए गए रिसॉर्स, और iframe के लिए किया जाता है. इस पेज पर बताया गया है कि वे क्या हैं और वे एक-दूसरे से किस तरह अलग हैं.
शुरुआत की जगह
![शुरुआत की जगह](https://web.dev/static/articles/same-site-same-origin/image/origin-scheme.png?authuser=6&hl=hi)
"ऑरिजिन", एक स्कीम (जिसे
प्रोटोकॉल भी कहा जाता है, जैसे कि एचटीटीपी या एचटीटीपीएस), एक होस्टनेम, और एक पोर्ट (अगर इसकी जानकारी दी गई हो) का कॉम्बिनेशन है. उदाहरण के लिए, https://www.example.com:443/foo
का यूआरएल दिया गया है,
तो "ऑरिजिन" https://www.example.com:443
है.
"सेम-ऑरिजिन" और "क्रॉस-ऑरिजिन"
जिन वेबसाइटों में स्कीम, होस्टनेम, और पोर्ट का एक जैसा कॉम्बिनेशन होता है उन्हें "एक ही-ऑरिजिन" माना जाता है. बाकी सब कुछ "क्रॉस-ऑरिजिन" माना जाता है.
शुरुआत की जगह A | ऑरिजिन B | "सेम-ऑरिजिन" या "क्रॉस-ऑरिजिन"? |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | क्रॉस-ऑरिजिन: अलग-अलग डोमेन |
https://example.com:443 | क्रॉस-ऑरिजिन: अलग-अलग सबडोमेन | |
https://login.example.com:443 | क्रॉस-ऑरिजिन: अलग-अलग सबडोमेन | |
http://www.example.com:443 | क्रॉस-ऑरिजिन: अलग-अलग स्कीम | |
https://www.example.com:80 | क्रॉस-ऑरिजिन: अलग-अलग पोर्ट | |
https://www.example.com:443 | एक ही ऑरिजिन: एग्ज़ैक्ट मैच | |
https://www.example.com | सेम-ऑरिजिन: इंप्लिसिट पोर्ट नंबर (443) से मैच होता है |
साइट
![साइट (TLD+1)](https://web.dev/static/articles/same-site-same-origin/image/site-tld1-ae5ebbc587fbe.png?authuser=6&hl=hi)
.com
और .org
जैसे टॉप लेवल डोमेन (टीएलडी) रूट ज़ोन डेटाबेस में शामिल हैं. पिछले
उदाहरण में, "site" स्कीम, टीएलडी, और डोमेन के ठीक पहले के हिस्से का मिला-जुला रूप है (हम इसे TLD+1 कहते हैं). उदाहरण के लिए, https://www.example.com:443/foo
यूआरएल में "साइट", https://example.com
है.
सार्वजनिक सफ़िक्स सूची और ईटीएलडी
.co.jp
या .github.io
जैसे एलिमेंट वाले डोमेन के लिए, "साइट" की पहचान करने के लिए, .jp
या .io
का इस्तेमाल करना काफ़ी नहीं है. किसी खास टीएलडी के लिए, रजिस्टर किए जा सकने वाले डोमेन का लेवल, एल्गोरिदम के हिसाब से तय करने का कोई तरीका नहीं है.
इस काम में मदद के लिए, पब्लिक सफ़िक्स सूची में पब्लिक सफ़िक्स की एक सूची दी गई है. इन्हें असरदार टीएलडी (ईटीएलडी) भी कहा जाता है. ईटीएलडी की सूची publicsuffix.org/list पर मैनेज की जाती है.
जिस डोमेन में ई-टीएलडी शामिल है उसके "साइट" वाले हिस्से की पहचान करने के लिए, .com
वाले उदाहरण जैसा ही लागू करें. https://www.project.github.io:443/foo
का उदाहरण लेते हैं, स्कीम https
है, eTLD .github.io
है, eTLD+1 project.github.io
है, इसलिए https://project.github.io
को इस यूआरएल के लिए "साइट" माना गया है.
![साइट (eTLD+1)](https://web.dev/static/articles/same-site-same-origin/image/site-etld1-2ffebe0e355bd.png?authuser=6&hl=hi)
"एक ही साइट" और "क्रॉस-साइट"
एक जैसी स्कीम और एक ही eTLD+1 वाली वेबसाइटों को "एक ही साइट" माना जाता है. अलग स्कीम या अलग eTLD+1 वाली वेबसाइटें, "क्रॉस-साइट" होती हैं.
शुरुआत की जगह A | ऑरिजिन B | "एक ही साइट के लिए" या "क्रॉस-साइट"? |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | क्रॉस-साइट: अलग-अलग डोमेन |
https://login.example.com:443 | एक ही साइट: अलग-अलग सबडोमेन से कोई फ़र्क़ नहीं पड़ता | |
http://www.example.com:443 | क्रॉस-साइट: अलग-अलग योजनाएं | |
https://www.example.com:80 | एक ही साइट: अलग-अलग पोर्ट से कोई फ़र्क़ नहीं पड़ता | |
https://www.example.com:443 | एक ही साइट: एग्ज़ैक्ट मैच | |
https://www.example.com | एक ही साइट: पोर्ट से कोई फ़र्क़ नहीं पड़ता |
"एक ही साइट के बिना स्कीम"
![स्कीमलेस समान साइट](https://web.dev/static/articles/same-site-same-origin/image/schemeless-same-site-3ba215c9666cd.png?authuser=6&hl=hi)
एचटीटीपी को एक कमज़ोर चैनल के तौर पर इस्तेमाल किए जाने से रोकने के लिए, "उसी साइट" की परिभाषा में बदलाव किया गया, ताकि यूआरएल स्कीम को साइट के हिस्से के तौर पर शामिल किया जा सके.
स्कीम की तुलना के बिना "एक ही साइट" के पुराने सिद्धांत को अब "बिना स्कीम वाली समान साइट" कहा जाता है. उदाहरण के लिए, http://www.example.com
और
https://www.example.com
को एक ही साइट के बिना स्कीम वाली साइट माना जाता है, लेकिन समान साइट नहीं, क्योंकि सिर्फ़ eTLD+1 वाला हिस्सा मायने रखता है और स्कीम पर ध्यान नहीं दिया जाता.
शुरुआत की जगह A | ऑरिजिन B | "एक ही साइट के बिना स्कीम" या "क्रॉस-साइट"? |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | क्रॉस-साइट: अलग-अलग डोमेन |
https://login.example.com:443 | बिना स्कीम वाली एक ही साइट: अलग-अलग सबडोमेन से कोई फ़र्क़ नहीं पड़ता | |
http://www.example.com:443 | एक ही साइट में बिना किसी बदलाव की इमेज: अलग-अलग स्कीम से कोई फ़र्क़ नहीं पड़ता | |
https://www.example.com:80 | एक ही साइट में बिना स्कीम: अलग-अलग पोर्ट से कोई फ़र्क़ नहीं पड़ता | |
https://www.example.com:443 | एक ही साइट के बिना स्कीम: एग्ज़ैक्ट मैच | |
https://www.example.com | एक ही साइट में बिना स्कीम: पोर्ट से कोई फ़र्क़ नहीं पड़ता |
यह कैसे पता करें कि अनुरोध "एक ही साइट", "एक ही-शुरुआत" या "क्रॉस-साइट" है या नहीं
सभी मॉडर्न ब्राउज़र, Sec-Fetch-Site
एचटीटीपी हेडर के साथ अनुरोध भेजते हैं.
इस हेडर में इनमें से कोई एक वैल्यू होती है:
cross-site
same-site
(एक ही साइट के स्कीम वाले प्लान का मतलब है)same-origin
none
Sec-Fetch-Site
की वैल्यू की जांच करके, यह पता लगाया जा सकता है कि अनुरोध एक ही साइट का है, उसका मूल अनुरोध एक ही साइट का है या क्रॉस-साइट का.
आपको Sec-Fetch-Site
हेडर की वैल्यू पर सही तरीके से भरोसा करना चाहिए, क्योंकि:
Sec-
से शुरू होने वाले एचटीटीपी हेडर में JavaScript बदलाव नहीं कर सकता- ब्राउज़र इन हेडिंग को हमेशा सेट करता है.