nginx का इस्तेमाल करके एसएक्सजी फ़ाइलें कैसे पाएं और उन्हें कैसे उपलब्ध कराएं. साथ ही, सबरिसॉर्स को प्रीफ़ेच करने में आने वाली चुनौतियों का सामना करें.
साइन किए गए एचटीटीपी एक्सचेंज (एसएक्सजी) डिस्ट्रिब्यूटर के तौर पर, ओरिजनल कॉन्टेंट क्रिएटर्स की ओर से एसएक्सजी फ़ाइलें डिलीवर की जा सकती हैं. एसएक्सजी के साथ काम करने वाले वेब ब्राउज़र, ऐसी एसएक्सजी फ़ाइलों को उसी तरह दिखाएंगे जैसे उन्हें ओरिजनल कॉन्टेंट क्रिएटर्स ने डिलीवर किया हो. इसकी मदद से, निजता का उल्लंघन किए बिना क्रॉस-साइट पहले से लोड करने की प्रोसेस लागू की जा सकती है. इस गाइड में, एसएक्सजी को सही तरीके से डिस्ट्रिब्यूट करने का तरीका बताया गया है.
क्रॉस-ब्राउज़र सहायता
फ़िलहाल, सिर्फ़ Chrome ही ऐसा ब्राउज़र है जिस पर एसएक्सजी काम करता है. ज़्यादा अप-टू-डेट जानकारी के लिए, ऑरिजिन से साइन किए गए एचटीटीपी एक्सचेंज का सहमति और मानक तय करने वाला सेक्शन देखें.
एसएक्सजी फ़ाइलें पाना
अपने Accept
अनुरोध के हेडर में बताएं कि आपको सर्वर से, अनुरोध के साथ एसएक्सजी फ़ाइल भेजने की अनुमति देनी है:
Accept: application/signed-exchange;v=b3,*/*;q=0.8
यह गाइड मानता है कि आपने अपनी एसएक्सजी फ़ाइलों को /var/www/sxg
में रखा है.
कोई सामान्य एसएक्सजी फ़ाइल सर्व करें
एक एसएक्सजी फ़ाइल उपलब्ध कराने के लिए, नीचे दिए गए हेडर अटैच करें:
Content-Type: application/signed-exchange;v=v3
X-Content-Type-Options: nosniff
nginx
को कॉन्फ़िगर करें:
http {
...
types {
application/signed-exchange;v=b3 sxg;
}
add_header X-Content-Type-Options nosniff;
location / {
more_set_headers "Content-Type: application/signed-exchange;v=b3";
alias /var/www/sxg/;
try_files $uri.sxg $uri =404;
autoindex off;
}
...
नए कॉन्फ़िगरेशन को nginx
में लोड करें:
sudo systemctl restart nginx.service
nginx
, एसएक्सजी फ़ाइलें इस्तेमाल करना शुरू कर देगा.
जब Chrome आपके सर्वर को ऐक्सेस करता है, तो बार में मूल कॉन्टेंट पब्लिशर का पता दिखेगा!
सबरिसॉर्स प्रीफ़ेच करें
ज़्यादातर वेब पेजों में कई सबरिसॉर्स होते हैं, जैसे कि सीएसएस, JavaScript, फ़ॉन्ट, और इमेज. कॉन्टेंट क्रिएटर की निजी कुंजी के बिना, एसएक्सजी के कॉन्टेंट में बदलाव नहीं किया जा सकता. इससे, ब्राउज़र में सबरिसॉर्स को ठीक करने में समस्या आती है.
उदाहरण के लिए, मान लें कि https://website.test/index.html
के index.html.sxg
में, https://website.test/app.js
का लिंक है. जब किसी उपयोगकर्ता के ब्राउज़र को https://distributor.test/example.com/index.html.sxg
से एसएक्सजी फ़ाइल मिलती है, तो उसे https://website.test/app.js
का लिंक दिखेगा.
ब्राउज़र, https://website.test/app.js
को सीधे ऐक्सेस करने पर उन्हें फ़ेच कर सकता है. हालांकि, निजता को बनाए रखने के लिए, पहले से लोड किए जाने वाले चरण में ऐसा नहीं किया जाना चाहिए.
अगर संसाधन को पहले से लोड करने के दौरान फ़ेच किया गया था, तो इससे कॉन्टेंट क्रिएटर (website.test
) के लिए यह पता लगाना मुमकिन होगा कि कॉन्टेंट डिस्ट्रिब्यूटर (distributor.test
) ने संसाधन का अनुरोध किया है.
अगर डिस्ट्रिब्यूटर अपनी सेवा से app.js.sxg
को सेवा देना चाहता है और https://website.test/app.js
को उस सबरिसॉर्स (जैसे कि https://distributor.test/website.test/app.js.sxg
) के डिस्ट्रिब्यूटर के वर्शन के तौर पर बदलने की कोशिश करता है, तो हस्ताक्षर मेल नहीं खाते और एसएक्सजी अमान्य हो जाएगा.
इस समस्या को हल करने के लिए, Chrome में अभी प्रयोग के तौर पर एक एसएक्सजी सबरिसॉर्स को प्रीफ़ेच करने की सुविधा दी गई है.
इसे about://flags/#enable-sxg-subresource-prefetching
पर चालू किया जा सकता है.
सबरिसॉर्स को प्रीफ़ेच करने के लिए, इन शर्तों को पूरा करना ज़रूरी है:
- पब्लिशर को एसएक्सजी में रिस्पॉन्स हेडर एंट्री को एम्बेड करना होगा. जैसे:
link: <https://website.test/app.js>;rel="preload";as="script",<https://website.test/app.js>;rel="allowed-alt-sxg";header-integrity="sha256-h6GuCtTXe2nITIHHpJM+xCxcKrYDpOFcIXjihE4asxk="
. इससे, उस सबरिसॉर्स के बारे में पता चलता है जिसे एसएक्सजी के खास इंटिग्रिटी हैश के साथ बदला जा सकता है. - डिस्ट्रिब्यूटर को एसएक्सजी दिखाते समय, रिस्पॉन्स हेडर अटैच करना होगा. जैसे:
link: <https://distributor.test/website.test/app.js.sxg>;rel="alternate";type="application/signed-exchange;v=b3";anchor="https://website.test/app.js"
. यहapp.js
के पाथ के बारे में बताता है और सबरिसॉर्स से जुड़ा होता है.
पहला तरीका ज़्यादा आसान है, क्योंकि nginx-sxg-module
इंटिग्रिटी हैश को कैलकुलेट कर सकता है और उन्हें अपस्ट्रीम रिस्पॉन्स से लिंक हेडर में जोड़ सकता है. हालांकि, दूसरी चुनौती ज़्यादा मुश्किल है, क्योंकि कॉन्टेंट डिस्ट्रिब्यूटर को एसएक्सजी में बताए गए सबरिसॉर्स के बारे में जानकारी होनी चाहिए.
अगर https://website.test/app.js
के अलावा कोई सबरिसॉर्स नहीं हैं, तो आपको अपने nginx कॉन्फ़िगरेशन में सिर्फ़ यह जोड़ना होगा:
add_header link <https://distributor.test/website.test/app.js.sxg>;rel="alter...
हालांकि, ऐसे मामले बहुत कम होते हैं, क्योंकि सामान्य वेबसाइटों में कई सबरिसॉर्स होते हैं. इसके अलावा, एसएक्सजी फ़ाइल दिखाते समय डिस्ट्रिब्यूटर को सही ऐंकर लिंक हेडर अटैच करना होगा. फ़िलहाल, इस समस्या को आसानी से हल नहीं किया जा सकता. इसलिए, अपडेट पाने के लिए हमारे साथ बने रहें!
सुझाव/राय भेजना या शिकायत करना
Chromium के इंजीनियर, webpackage-dev@chromium.org पर एसएक्सजी उपलब्ध कराने के बारे में आपकी राय जानना चाहते हैं. खास जानकारी वाली चर्चा में भी शामिल हुआ जा सकता है या टीम से गड़बड़ी की शिकायत की जा सकती है. आपके सुझाव, शिकायत या राय से, स्टैंडर्ड तय करने की प्रक्रिया को पूरा करने में काफ़ी मदद मिलेगी. साथ ही, इससे लागू होने वाली समस्याओं को हल करने में भी मदद मिलेगी. धन्यवाद!