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

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

डोमिनिक डेनिसोला
डोमेनिक डेनिसकोला

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 जैसे सबडोमेन को एक-दूसरे से इंटरैक्ट करने की अनुमति देते हैं. इसलिए, ब्राउज़र अपने-आप सबडोमेन को एक-दूसरे से अलग नहीं कर सकते.

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

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

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

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

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

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

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

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

Origin-keyed agent clusters को कब इस्तेमाल करें

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 हेडर का इस्तेमाल करके एम्बेडर पर परफ़ॉर्मेंस के असर को कम करने की कोशिश कर सकती है.

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

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

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

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 जब ऐसा नहीं होता है; और Origin-Agent-Cluster हेडर लागू नहीं करने वाले ब्राउज़र में undefined होता है. इस डेटा को अपने Analytics प्लैटफ़ॉर्म में लॉग करने से, इस बात की जांच की जा सकती है कि आपने सर्वर को सही तरीके से कॉन्फ़िगर किया है या नहीं.

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

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

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

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

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

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

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

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

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

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

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

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

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

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