ऑरिजिन-एजेंट-क्लस्टर हेडर की मदद से, परफ़ॉर्मेंस आइसोलेशन का अनुरोध करना

डोमेन-वाइड स्क्रिप्टिंग को सीमित करने और ब्राउज़र से खास संसाधनों का अनुरोध करने के लिए, नया एचटीटीपी रिस्पॉन्स हेडर.

Domenic Denicola
Domenic Denicola

Origin-Agent-Cluster एक नया एचटीटीपी रिस्पॉन्स हेडर है. यह ब्राउज़र को एक ही साइट के क्रॉस-ऑरिजिन पेजों के बीच, सिंक्रोनस स्क्रिप्टिंग ऐक्सेस को रोकने का निर्देश देता है. ब्राउज़र Origin-Agent-Cluster का इस्तेमाल इस संकेत के तौर पर भी कर सकते हैं कि आपकी साइट के ऑरिजिन को अपने अलग संसाधन मिलें. जैसे, एक खास प्रक्रिया.

ब्राउज़र के साथ काम करना

फ़िलहाल, Origin-Agent-Cluster हेडर सिर्फ़ Chrome 88 और उसके बाद के वर्शन में लागू किया गया है. इसे Mozilla Firefox के प्रतिनिधियों के साथ मिलकर डिज़ाइन किया गया है. उन्होंने इसे प्रोटोटाइप के तौर पर इस्तेमाल करने लायक के तौर पर मार्क किया है. साथ ही, Safari में इस्तेमाल होने वाले ब्राउज़र इंजन, WebKit के प्रतिनिधियों ने इसे शुरुआती तौर पर अच्छा रेस्पॉन्स दिया है.

हालांकि, इस बीच, अपने सभी उपयोगकर्ताओं के लिए Origin-Agent-Cluster हेडर को डिप्लॉय करने में कोई समस्या नहीं है. जो ब्राउज़र इसे समझ नहीं पाते वे इसे अनदेखा कर देंगे. साथ ही, ऑरिजिन-की वाले एजेंट क्लस्टर के पेज, साइट-की वाले पेजों (डिफ़ॉल्ट) के मुकाबले कम काम कर सकते हैं. इसलिए, इंटरऑपरेबिलिटी से जुड़ी कोई समस्या नहीं है.

ब्राउज़र, एक ही साइट के ऑरिजिन को अपने-आप अलग-अलग क्यों नहीं कर सकते

वेब को एक ही ऑरिजिन से जुड़ी नीति के आधार पर बनाया गया है. यह सुरक्षा से जुड़ी एक सुविधा है, जो इस बात पर पाबंदी लगाती है कि दस्तावेज़ और स्क्रिप्ट, किसी अन्य ऑरिजिन के संसाधनों के साथ कैसे इंटरैक्ट कर सकते हैं. उदाहरण के लिए, https://a.example पर होस्ट किया गया पेज, https://b.example या https://sub.a.example पर होस्ट किए गए पेज से अलग ऑरिजिन पर होता है.

ब्राउज़र, ऑरिजिन के अलग-अलग तरीकों से दिए गए अलगाव का इस्तेमाल, पर्दे के पीछे करते हैं. पुराने दिनों में, अलग-अलग ऑरिजिन एक-दूसरे के डेटा को ऐक्सेस नहीं कर पाते थे, तब भी वे ऑपरेटिंग सिस्टम थ्रेड, प्रोसेस, और मेमोरी के बंटवारे जैसे संसाधन शेयर करते थे. इसका मतलब यह था कि अगर एक टैब धीमा था, तो बाकी सभी टैब भी धीमा हो जाएंगे. या यदि किसी टैब ने बहुत अधिक मेमोरी का उपयोग किया है, तो पूरा ब्राउज़र क्रैश हो जाएगा.

आज-कल ब्राउज़र ज़्यादा बेहतर हो जाते हैं और अलग-अलग ऑरिजिन को अलग-अलग प्रोसेस में बांटने की कोशिश करते हैं. यह प्रोसेस हर ब्राउज़र में अलग-अलग तरीके से काम करती है: ज़्यादातर ब्राउज़र में टैब के बीच कुछ लेवल का बंटवारा होता है. हालांकि, एक ही टैब में मौजूद अलग-अलग iframe, एक ही प्रोसेस शेयर कर सकते हैं. साथ ही, प्रोसेस में कुछ मेमोरी खर्च होती है. इसलिए, वे बहुत ज़्यादा प्रोसेस बनाने से बचने के लिए, हेयुरिस्टिक्स का इस्तेमाल करते हैं: उदाहरण के लिए, Firefox में उपयोगकर्ता के हिसाब से प्रोसेस की सीमा तय की जा सकती है. साथ ही, Chrome अपने व्यवहार में डेस्कटॉप (जहां मेमोरी ज़्यादा होती है) और मोबाइल (जहां मेमोरी कम होती है) के बीच अंतर करता है.

ये हेयुरिस्टिक्स सटीक नहीं हैं. साथ ही, इनमें एक अहम सीमा होती है: एक ही ऑरिजिन की नीति में कुछ अपवाद होते हैं, जिनकी वजह से https://sub.a.example और https://a.example जैसे सबडोमेन एक-दूसरे से बात कर पाते हैं. इसलिए, ब्राउज़र अपने-आप सबडोमेन को एक-दूसरे से अलग नहीं कर पाते.

इस डिफ़ॉल्ट व्यवहार को "साइट के हिसाब से बने एजेंट क्लस्टर" कहा जाता है: इसका मतलब है कि ब्राउज़र, पेजों को उनकी साइट के आधार पर ग्रुप करता है. नया Origin-Agent-Cluster हेडर, ब्राउज़र से किसी पेज के लिए इस डिफ़ॉल्ट व्यवहार को बदलने के लिए कहता है. इसके लिए, वह पेज को ऑरिजिन के हिसाब से बने एजेंट क्लस्टर में डालता है, ताकि उसे सिर्फ़ उन पेजों के साथ ग्रुप किया जा सके जिनका ऑरिजिन एक जैसा है. खास तौर पर, एक जैसे साइट के क्रॉस-ऑरिजिन पेजों को एजेंट क्लस्टर से बाहर रखा जाएगा.

ऑप्ट-इन करने पर, ब्राउज़र इन नए ऑरिजिन के हिसाब से बने एजेंट क्लस्टर को अपने खास संसाधन दे सकते हैं. ये संसाधन, अन्य ऑरिजिन के संसाधनों के साथ नहीं जोड़े जाते. उदाहरण के लिए, ऐसे पेजों के लिए अपनी प्रोसेस तय की जा सकती है या उन्हें अलग-अलग थ्रेड पर शेड्यूल किया जा सकता है. अपने पेज में Origin-Agent-Cluster हेडर जोड़कर, ब्राउज़र को यह बताया जा रहा है कि पेज को ऐसे खास रिसॉर्स से फ़ायदा मिलेगा.

हालांकि, अलग करने और इन फ़ायदों को पाने के लिए, ब्राउज़र को कुछ लेगसी सुविधाओं को बंद करना होगा.

ऑरिजिन-की वाले पेज क्या नहीं कर सकते

जब आपका पेज, ऑरिजिन-की वाले एजेंट क्लस्टर में होता है, तो आपको एक ही साइट के क्रॉस-ऑरिजिन पेजों से बात करने की कुछ सुविधाएं नहीं मिलतीं. ये सुविधाएं पहले उपलब्ध थीं. खास तौर पर:

  • अब document.domain को सेट नहीं किया जा सकता. यह एक लेगसी सुविधा है. आम तौर पर, इसकी मदद से एक ही साइट के क्रॉस-ऑरिजिन पेज, एक-दूसरे के डीओएम को सिंक करके ऐक्सेस कर सकते हैं. हालांकि, ऑरिजिन के हिसाब से बने एजेंट क्लस्टर में यह सुविधा बंद रहती है.

  • अब postMessage() की मदद से, एक ही साइट के दूसरे क्रॉस-ऑरिजिन पेजों पर WebAssembly.Module ऑब्जेक्ट नहीं भेजे जा सकते.

  • (सिर्फ़ Chrome के लिए) अब एक ही साइट के दूसरे क्रॉस-ऑरिजिन पेजों पर, SharedArrayBuffer या WebAssembly.Memory ऑब्जेक्ट नहीं भेजे जा सकते.

ऑरिजिन-की एजेंट क्लस्टर का इस्तेमाल कब करना चाहिए

Origin-Agent-Cluster हेडर से सबसे ज़्यादा फ़ायदा पाने वाले ऑरिजिन ये हैं:

  • जब भी हो सके, अपने खास संसाधनों का इस्तेमाल करके बेहतरीन परफ़ॉर्म करें. उदाहरण के लिए, बेहतर परफ़ॉर्मेंस वाले गेम, वीडियो कॉन्फ़्रेंसिंग साइटें या मल्टीमीडिया क्रिएशन ऐप्लिकेशन.

  • इसमें बहुत ज़्यादा रिसॉर्स वाले iframe शामिल हैं, जो अलग-अलग ऑरिजिन वाले हैं, लेकिन एक ही साइट का इस्तेमाल करते हैं. उदाहरण के लिए, अगर https://mail.example.com, https://chat.example.com iframes को एम्बेड करता है, तो ऑरिजिन-कीइंग https://mail.example.com/ यह पक्का करता है कि चैट टीम के लिखे गए कोड से, मेल टीम के लिखे गए कोड में गलती से कोई रुकावट न आए. साथ ही, यह ब्राउज़र को अलग-अलग प्रोसेस देने का सुझाव दे सकता है, ताकि उन्हें अलग से शेड्यूल किया जा सके और परफ़ॉर्मेंस पर एक-दूसरे का असर कम हो.

  • इनका इस्तेमाल, एक ही साइट के अलग-अलग ऑरिजिन वाले पेजों पर किया जा सकता है. हालांकि, इनमें ज़्यादा संसाधनों की ज़रूरत होती है. उदाहरण के लिए, अगर https://customerservicewidget.example.com को वीडियो चैट के लिए कई संसाधनों का इस्तेमाल करना है और उसे https://*.example.com में अलग-अलग ऑरिजिन पर एम्बेड किया जाएगा, तो उस विजेट को मैनेज करने वाली टीम, Origin-Agent-Cluster हेडर का इस्तेमाल करके, एम्बेड करने वालों पर उसकी परफ़ॉर्मेंस के असर को कम कर सकती है.

इसके अलावा, आपको यह भी पक्का करना होगा कि आपको ऊपर बताई गई बहुत कम इस्तेमाल होने वाली क्रॉस-ऑरिजिन कम्यूनिकेशन सुविधाओं को बंद करने की अनुमति नहीं है. साथ ही, यह भी पक्का करना होगा कि आपकी साइट एचटीटीपीएस का इस्तेमाल कर रही है.

हालांकि, ये सिर्फ़ दिशा-निर्देश हैं. मेज़रमेंट की मदद से यह तय किया जा सकता है कि ऑरिजिन-की एजेंट क्लस्टर से आपकी साइट को मदद मिलेगी या नहीं. खास तौर पर, आपको अपने वेब विटल्स और संभावित तौर पर अपनी मेमोरी के इस्तेमाल को मेज़र करना होगा, ताकि यह देखा जा सके कि ऑरिजिन-कीइंग का क्या असर पड़ा. (खास तौर पर, मेमोरी का इस्तेमाल एक संभावित समस्या है, क्योंकि Play में प्रोसेस की संख्या बढ़ाने से हर प्रोसेस के लिए ज़्यादा मेमोरी खर्च हो सकती है.) आपको ऑरिजिन-कीइंग को सिर्फ़ रोल आउट करके, बेहतर नतीजों की उम्मीद नहीं करनी चाहिए.

यह क्रॉस-ऑरिजिन आइसोलेशन से कैसे जुड़ा है?

Origin-Agent-Cluster हेडर की मदद से एजेंट क्लस्टर को ऑरिजिन के हिसाब से व्यवस्थित करना, Cross-Origin-Opener-Policy और Cross-Origin-Embedder-Policy हेडर की मदद से क्रॉस-ऑरिजिन आइसोलेशन से जुड़ा है, लेकिन यह उससे अलग है.

जो साइट खुद को क्रॉस-ऑरिजिन से अलग करती है वह Origin-Agent-Cluster हेडर का इस्तेमाल करने पर, समान-साइट के क्रॉस-ऑरिजिन कम्यूनिकेशन की सुविधाओं को भी बंद कर देगी. हालांकि, क्रॉस-ऑरिजिन आइसोलेशन के लिए, Origin-Agent-Cluster हेडर अब भी मददगार हो सकता है. यह ब्राउज़र को रिसॉर्स के बंटवारे के अनुभव में बदलाव करने के अतिरिक्त संकेत के तौर पर काम करता है. इसलिए, आपको अब भी Origin-Agent-Cluster हेडर लागू करना चाहिए और नतीजों को मेज़र करना चाहिए. ऐसा उन पेजों पर भी करना चाहिए जो पहले से ही क्रॉस-ऑरिजिन से अलग किए गए हैं.

Origin-Agent-Cluster हेडर का इस्तेमाल करने का तरीका

Origin-Agent-Cluster हेडर का इस्तेमाल करने के लिए, अपने वेब सर्वर को कॉन्फ़िगर करें, ताकि वह यह एचटीटीपी रिस्पॉन्स हेडर भेज सके:

Origin-Agent-Cluster: ?1

?1 की वैल्यू, बूलियन true वैल्यू के लिए स्ट्रक्चर्ड हेडर सिंटैक्स होता है.

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

ब्राउज़र, हेडर का हमेशा पालन क्यों नहीं कर पाता?

इस "मेमोरी" की वजह यह है कि किसी ऑरिजिन के लिए, कुंजी को एक जैसा रखा जा सके. अगर किसी ऑरिजिन के कुछ पेजों को ऑरिजिन-की दी गई थी, जबकि अन्य पेजों को नहीं दी गई थी, तो आपके पास एक ही ऑरिजिन के दो पेज हो सकते हैं. इन्हें अलग-अलग एजेंट क्लस्टर में रखा गया था. इसलिए, इन पेजों को एक-दूसरे से बात करने की अनुमति नहीं थी. यह प्रोसेस, वेब डेवलपर और ब्राउज़र, दोनों के लिए काफ़ी अलग होगी. इसलिए, अगर दिए गए ऑरिजिन के लिए दिए गए हेडर और हेडर, पहले से दिए गए हेडर से मेल नहीं खाते हैं, तो Origin-Agent-Cluster की स्पेसिफ़िकेशन इसके बजाय, उन्हें अनदेखा कर देती है. Chrome में, इसकी वजह से कंसोल पर चेतावनी दिखेगी.

यह एक ब्राउज़िंग कॉन्टेक्स्ट ग्रुप के दायरे में आता है. यह टैब, विंडो या iframe का एक ग्रुप होता है. ये सभी window.opener, frames[0] या window.parent जैसे तरीकों से एक-दूसरे तक पहुंच सकते हैं. इसका मतलब है कि जब किसी ऑरिजिन की ऑरिजिन- या साइट-कीइंग तय हो जाती है (ब्राउज़र हेडर को देखता है या नहीं देखता), तो उसे बदलने के लिए एक नया टैब खोलना ज़रूरी होता है. यह टैब, पुराने टैब से किसी भी तरह से कनेक्ट नहीं होता.

Origin-Agent-Cluster हेडर की जांच करने के लिए, यह जानकारी अहम हो सकती है. इसे अपनी साइट पर पहली बार जोड़ते समय, सिर्फ़ पेज को फिर से लोड करने से काम नहीं होगा. इसके लिए, आपको टैब को बंद करके नया टैब खोलना होगा.

Origin-Agent-Cluster हेडर लागू है या नहीं, यह देखने के लिए JavaScript window.originAgentCluster प्रॉपर्टी का इस्तेमाल करें. यह वैल्यू true होगी, जब हेडर (या क्रॉस-ऑरिजिन आइसोलेशन जैसे अन्य तरीकों) की वजह से ऑरिजिन-कीइंग हुई हो. यह वैल्यू false होगी, जब ऑरिजिन-कीइंग नहीं हुई हो. साथ ही, यह वैल्यू undefined उन ब्राउज़र में होगी जो Origin-Agent-Cluster हेडर लागू नहीं करते. इस डेटा को अपने Analytics प्लैटफ़ॉर्म पर लॉग करने से, यह जांचने में मदद मिल सकती है कि आपने अपने सर्वर को सही तरीके से कॉन्फ़िगर किया है या नहीं.

आखिर में, ध्यान रखें कि Origin-Agent-Cluster हेडर सिर्फ़ सुरक्षित कॉन्टेक्स्ट पर काम करेगा. जैसे, एचटीटीपीएस पेजों या http://localhost पर. गैर-localhost एचटीटीपी पेजों पर, Origin-keyed agent clusters के साथ काम नहीं किया जा सकता.

ऑरिजिन-कीइंग एक सुरक्षा सुविधा नहीं है

Origin-keyed agent cluster का इस्तेमाल करने से आपकी ऑरिजिन, एक ही साइट के क्रॉस-ऑरिजिन पेजों से सिंक्रोनस ऐक्सेस से अलग हो जाती है. हालांकि, यह Cross-Origin-Resource-Policy और Cross-Origin-Opener-Policy जैसे सुरक्षा से जुड़े हेडर की सुरक्षा नहीं देता. खास तौर पर, यह Spectre जैसे साइड चैनल हमलों से सुरक्षा देने में भरोसेमंद नहीं है.

यह थोड़ा हैरान करने वाला हो सकता है, क्योंकि कभी-कभी ऑरिजिन की-कीइंग की वजह से आपकी ऑरिजिन अपनी खुद की प्रोसेस बन सकती है. साथ ही, अलग-अलग प्रोसेस की वजह से साइड-चैनल हमलों से बचाव अहम हो जाता है. हालांकि, ध्यान रखें कि Origin-Agent-Cluster हेडर सिर्फ़ एक संकेत है. ब्राउज़र पर यह ज़रूरी नहीं है कि वह आपके ऑरिजिन को अलग प्रोसेस दे. ऐसा कई वजहों से हो सकता है:

  • ऐसा हो सकता है कि कोई ब्राउज़र ऐसा करने के लिए टेक्नोलॉजी लागू न करे. उदाहरण के लिए, फ़िलहाल Safari और Firefox, अपनी प्रोसेस में अलग-अलग टैब डाल सकते हैं, लेकिन iframes के लिए ऐसा नहीं कर सकते.

  • ऐसा हो सकता है कि ब्राउज़र यह तय करे कि अलग प्रोसेस की ज़रूरत नहीं है. उदाहरण के लिए, कम मेमोरी वाले Android डिवाइसों या Android वेबव्यू में, Chrome कम से कम प्रोसेस का इस्तेमाल करता है.

  • हो सकता है कि ब्राउज़र, Origin-Agent-Cluster हेडर से मिले अनुरोध का पालन करना चाहे, लेकिन वह प्रोसेस के बजाय अलग तरह की अलगाव तकनीक का इस्तेमाल करके ऐसा कर सकता है. उदाहरण के लिए, Chrome परफ़ॉर्मेंस को अलग-अलग करने के लिए, प्रोसेस के बजाय थ्रेड का इस्तेमाल करने की परफ़ॉर्मेंस एक्सप्लोर कर रहा है.

  • हो सकता है कि उपयोगकर्ता या किसी दूसरी साइट पर चल रहा कोड, आपके ऑरिजिन पर पहले से ही साइट-की वाले पेज पर जा चुका हो. इस वजह से, एक जैसी जानकारी देने की गारंटी लागू हो जाती है और Origin-Agent-Cluster हेडर को पूरी तरह से अनदेखा कर दिया जाता है.

इन वजहों से, यह ज़रूरी है कि Origin-keyed agent clusters को सुरक्षा सुविधा के तौर पर न माना जाए. इसके बजाय, यह ब्राउज़र को संसाधनों के बंटवारे की प्राथमिकता तय करने में मदद करता है. यह इस बात का संकेत देता है कि आपके ऑरिजिन को खास संसाधनों से फ़ायदा मिलेगा. साथ ही, इसके बदले में आप कुछ सुविधाओं को छोड़ने को तैयार हैं.

सुझाव/राय दें या शिकायत करें

अगर आप Origin-Agent-Cluster हेडर का इस्तेमाल करने के बारे में सोच रहे हैं या उसके इस्तेमाल के बारे में सोच रहे हैं, तो Chrome टीम को आपके विचार जानने में खुशी होगी. आपके सार्वजनिक हित और समर्थन से, हमें सुविधाओं को प्राथमिकता देने में मदद मिलती है. साथ ही, हम ब्राउज़र के अन्य वेंडर को यह दिखा पाते हैं कि ये सुविधाएं कितनी अहम हैं. @ChromiumDev पर ट्वीट करें और Chrome DevRel को अपने विचार और अनुभव जानने दें.

अगर आपको स्पेसिफ़िकेशन या इस सुविधा के काम करने के तरीके के बारे में ज़्यादा सवाल पूछने हैं, तो एचटीएमएल स्टैंडर्ड के GitHub रिपॉज़िटरी पर समस्या दर्ज करें. अगर आपको Chrome में इस सुविधा को लागू करने में कोई समस्या आती है, तो new.crbug.com पर जाकर गड़बड़ी की शिकायत करें. इसके लिए, कॉम्पोनेंट फ़ील्ड को Internals>Sandbox>SiteIsolation पर सेट करें.

ज़्यादा जानें

ऑरिजिन के हिसाब से एजेंट क्लस्टर के बारे में ज़्यादा जानने के लिए, इन लिंक पर जाएं: