كيفية الحصول على ملفات SXG وعرضها باستخدام nginx، وتحديات الجلب المسبق للموارد الفرعية.
بصفتك موزّعًا لـ Signed HTTP Exchange (SXG)، يمكنك إرسال ملفات SXG نيابةً عن صنّاع المحتوى الأصليين. ستعرض متصفّحات الويب المتوافقة مع SXG ملفات SXG هذه كما لو تم إرسالها من صنّاع المحتوى الأصليين. ويتيح لك ذلك تنفيذ التحميل المُسبق على مواقع إلكترونية متعددة بدون انتهاك الخصوصية. يوضِّح لك هذا الدليل كيفية توزيع SXG بشكل صحيح.
التوافق مع جميع المتصفحات
Chrome هو حاليًا المتصفّح الوحيد الذي يتوافق مع SXG. شاهد الإجماع قسم توحيد عمليات تبادل HTTP الموقَّعة من المصدر للاطّلاع على مزيد من المعلومات الحديثة.
الحصول على ملفات SXG
حدِّد في عنوان طلب Accept
أنّك تريد من الخادم عرض ملف SXG مع الطلب:
Accept: application/signed-exchange;v=b3,*/*;q=0.8
يفترض هذا الدليل أنّك وضعت ملفات SXG في /var/www/sxg
.
عرض ملف SXG بسيط
أرفق العناوين التالية لتوزيع ملف 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
في عرض ملفات SXG.
عندما يصل Chrome إلى خادمك، سيظهر عنوان ناشر المحتوى الأصلي في الشريط!
الجلب المسبق للمراجع الفرعية
تتكون معظم صفحات الويب من عدة موارد فرعية، مثل CSS وJavaScript والخطوط والصور. لا يمكن تغيير محتوى SXG بدون المفتاح الخاص لصانع المحتوى. يؤدي ذلك إلى حدوث مشاكل عندما يحاول المتصفّح حلّ الموارد الفرعية.
على سبيل المثال، لنفترض أن index.html.sxg
من https://website.test/index.html
لديه رابط إلى https://website.test/app.js
. عندما يتلقّى متصفّح المستخدم ملف SXG من "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
)، سيؤدي ذلك إلى عدم تطابق التوقيع ويجعل SXG غير صالح.
لحل هذه المشكلة، تتوفّر الآن ميزة تجريبية للجلب المسبق لمورد فرعي من SXG في Chrome.
يمكنك تفعيلها على: about://flags/#enable-sxg-subresource-prefetching
.
لاستخدام الجلب المسبق للمورد الفرعي، يجب استيفاء الشروط التالية:
- على الناشر تضمين إدخال عنوان الاستجابة في SXG، مثل:
link: <https://website.test/app.js>;rel="preload";as="script",<https://website.test/app.js>;rel="allowed-alt-sxg";header-integrity="sha256-h6GuCtTXe2nITIHHpJM+xCxcKrYDpOFcIXjihE4asxk="
. تحدّد هذه السمة المورد الفرعي الذي يمكن استبداله بتجزئة السلامة الخاصة الخاصة بـ SXG. - على الموزّع إرفاق عنوان استجابة عند عرض SXG، مثل:
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
يمكنها حساب تجزئات السلامة وتضمينها في عناوين الروابط من الردود الأولية. أما الخيار الثاني، فهو أكثر صعوبة لأنّه يجب أن يكون موزِّع المحتوى على دراية بالموارد الفرعية المحدّدة في SXG.
في حال عدم توفّر موارد فرعية سوى https://website.test/app.js
، سيكون كل ما عليك إلحاقه في إعداد nginx هو:
add_header link <https://distributor.test/website.test/app.js.sxg>;rel="alter...
ولكن هذه الحالات نادرة لأن مواقع الويب النموذجية تتكون من الكثير من الموارد الفرعية. بالإضافة إلى ذلك، على الموزّع إرفاق عنوان رابط الإرساء المناسب عند عرض ملف SXG. في الوقت الحالي، لا تتوفر طريقة سهلة لحل هذه المشكلة، لذا ننصحك بمتابعة أخبارنا باستمرار.
إرسال ملاحظات
يحرص مهندسو Chromium على معرفة ملاحظاتك حول توزيع SXG من خلال الرابط webpackage-dev@chromium.org. يمكنك أيضًا الانضمام إلى مناقشة المواصفات أو إبلاغ الفريق عن خطأ. ستساعد ملاحظاتك جدًا في عملية توحيد المقاييس ومعالجة مشاكل التنفيذ. شكرًا