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

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

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

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

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

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

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

जब आपका पेज, Origin-keyed 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 iframe को एम्बेड करता है, तो Origin-keying https://mail.example.com/ यह पक्का करता है कि चैट टीम का लिखा गया कोड, मेल टीम के लिखे गए कोड में गलती से रुकावट न डाले. साथ ही, वह ब्राउज़र को अलग से शेड्यूल करने और एक-दूसरे पर उनकी परफ़ॉर्मेंस के असर को कम करने के लिए, ब्राउज़र को संकेत दे सकता है.

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

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

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

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

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

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

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

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

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

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

  • ब्राउज़र यह तय कर सकता है कि वह किसी अलग प्रक्रिया के लिए खर्च नहीं करना चाहिए. उदाहरण के लिए, कम मेमोरी वाले 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 पर सेट करें.

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

Origin-keyed agent clusters के बारे में ज़्यादा जानने के लिए, इन लिंक पर जानकारी पाएं: