إنّ SXG هي آلية تسليم تتيح مصادقة مصدر المورد بشكل مستقل عن طريقة تسليمه.
Signed Exchange (SXG) هي آلية تسليم تتيح مصادقة مصدر المورد بشكل مستقل عن طريقة تسليمه. يمكن أن يؤدي تنفيذ SXG إلى تحسين سرعة عرض أكبر محتوى مرئي (LCP) من خلال تفعيل ميزة الجلب المسبق المتعدّد المصادر الذي يحافظ على الخصوصية. بالإضافة إلى ذلك، يتيح هذا الفصل مجموعة متنوعة من حالات الاستخدام، مثل تجارب الإنترنت بلا اتصال بالإنترنت والعرض من ذاكرة التخزين المؤقت التابعة لجهات خارجية.
تقدّم هذه المقالة نظرة عامة شاملة على SXG: طريقة عملها وحالات استخدامها وأدواتها.
توافُق المتصفح
تتوافق SXG مع المتصفحات المستندة إلى Chromium (بدءًا من الإصدارات: Chrome 73 وEdge 79 وOpera 64).
نظرة عامة
كحالة استخدام أساسية، تستخدم SXG ذاكرة تخزين مؤقت لجلب المحتوى الذي تم توقيعه بشكل مشفّر من المصدر وعرضه. يساعد ذلك في تسريع عمليات التنقّل المتعدّدة المصادر من المواقع الإلكترونية المُحيلة مع ضمان بقاء الصفحات بدون تغيير وإسنادها بشكل صحيح إلى مصدرها. ويتم إخفاء أي معلومات قد تكشف الهوية إلى أن ينتقل المستخدم إلى موقع إلكتروني، ما يحمي خصوصية المستخدم. يُعدّ "بحث Google" من أوائل مستخدمي إمكانات الجلب المُسبق لملفات SXG، وبالنسبة إلى المواقع الإلكترونية التي تتلقّى جزءًا كبيرًا من زياراتها من "بحث Google"، يمكن أن تكون ملفات SXG أداة مهمة لتوفير عمليات تحميل أسرع للصفحات للمستخدمين. ونأمل أن يتوسّع هذا التأثير بمرور الوقت ليشمل المزيد من المُحيلين.
آلية العمل
يوقّع الموقع الإلكتروني على زوج من الطلبات/الاستجابات ("تبادل HTTP") بطريقة تتيح للمتصفّح التحقّق من مصدر المحتوى وسلامته بشكل مستقل عن كيفية توزيع المحتوى. ونتيجةً لذلك، يمكن للمتصفّح عرض عنوان URL للموقع الإلكتروني الأصلي في شريط العناوين، بدلاً من عنوان URL للخادم الذي قدّم المحتوى.

في السابق، كانت الطريقة الوحيدة التي تتيح للموقع الإلكتروني استخدام جهة خارجية لتوزيع محتواه مع الحفاظ على نسبه إليه هي مشاركة شهادات طبقة المقابس الآمنة (SSL) مع الموزّع. وهذا له عيوب أمنية؛ علاوة على ذلك، فهو بعيد كل البعد عن جعل المحتوى قابلاً للنقل حقًا.
تنسيق SXG
يتم تضمين SXG في ملف مشفّر ثنائيًا يحتوي على مكوّنين أساسيين: تبادل HTTP وتوقيع يغطي التبادل. يتألف تبادل HTTP من عنوان URL للطلب ومعلومات تفاوض المحتوى واستجابة HTTP.
format version: 1b3
request:
method: GET
uri: https://example.org/
headers:
response:
status: 200
headers:
Cache-Control: max-age=604800
Digest: mi-sha256-03=kcwVP6aOwYmA/j9JbUU0GbuiZdnjaBVB/1ag6miNUMY=
Expires: Mon, 24 Aug 2020 16:08:24 GMT
Content-Type: text/html; charset=UTF-8
Content-Encoding: mi-sha256-03
Date: Mon, 17 Aug 2020 16:08:24 GMT
Vary: Accept-Encoding
signature:
label;cert-sha256=<em>ViFgi0WfQ+NotPJf8PBo2T5dEuZ13NdZefPybXq/HhE=</em>;
cert-url="https://test.web.app/ViFgi0WfQ-NotPJf8PBo2T5dEuZ13NdZefPybXq_HhE";
date=1597680503;expires=1598285303;integrity="digest/mi-sha256-03";sig=<em>MEUCIQD5VqojZ1ujXXQaBt1CPKgJxuJTvFlIGLgkyNkC6d7LdAIgQUQ8lC4eaoxBjcVNKLrbS9kRMoCHKG67MweqNXy6wJg=</em>;
validity-url="https://example.org/webpkg/validity"
header integrity: sha256-Gl9bFHnNvHppKsv+bFEZwlYbbJ4vyf4MnaMMvTitTGQ=</p>
<p>The exchange has a valid signature.
payload [1256 bytes]:</p>
<pre class="prettyprint"><code><title>SXG example</title>
<meta charset="utf-8">
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<style type="text/css">
body {
background-color: #f0f0f2;
margin: 0;
padding: 0;
}
</style>
</code></pre>
<div>
<h1>Hello</h1>
</div>
<p>تشير المَعلمة expires في التوقيع إلى تاريخ انتهاء صلاحية SXG. وقد تكون مجموعة SXG صالحة لمدة 7 أيام كحد أقصى. يمكنك العثور على مزيد من المعلومات حول عنوان التوقيع في مواصفات Signed HTTP Exchange.
إتاحة التخصيص من جهة الخادم
سيتم عرض ملف SXG الذي يتضمّن عنوان Vary: Cookie فقط للمستخدمين الذين ليس لديهم ملفات تعريف ارتباط لعنوان URL الخاص بالطلب الموقَّع. إذا كان موقعك الإلكتروني يعرض محتوى HTML مختلفًا للمستخدمين الذين سجّلوا الدخول، يمكنك استخدام هذه الميزة للاستفادة من SXG بدون تغيير تلك التجربة. يمكنك الاطّلاع على تفاصيل حول التخصيص من جهة الخادم باستخدام ميزة SXG الديناميكية.
حِزم الويب
تُعدّ SXG جزءًا من مجموعة اقتراحات مواصفات إنشاء حزم الويب الأوسع نطاقًا. بالإضافة إلى SXG، فإنّ المكوّن الرئيسي الآخر لمواصفات Web Packaging هو حِزم الويب ("عمليات تبادل HTTP المجمّعة"). "حِزم الويب" هي مجموعة من موارد HTTP والبيانات الوصفية اللازمة لتفسير الحزمة.
غالبًا ما يحدث التباس بشأن العلاقة بين SXG وحِزم الويب. SXG و"حِزم الويب" هما تقنيتان مختلفتان لا تعتمدان على بعضهما، ويمكن استخدام "حِزم الويب" مع كلّ من عمليات التبادل الموقَّعة وغير الموقَّعة. من الأهداف المشتركة التي يحققها كل من SXG و"حِزم الويب" هو إنشاء تنسيق "حِزم ويب" يتيح مشاركة المواقع الإلكترونية بالكامل للاستخدام بلا إنترنت.
تسريع تحميل الصفحات باستخدام Signed Exchange
يمكن أن يساعد تفعيل ميزة Signed Exchanges في تسريع أداء صفحات الويب، وبالتالي التأثير في Core Web Vitals لموقعك الإلكتروني، لا سيما سرعة عرض أكبر محتوى مرئي (LCP). يستخدم "بحث Google" آلية SXG لتوفير تجربة تحميل أسرع للصفحات التي يتم تحميلها من صفحة نتائج البحث، وذلك بصفته مستخدمًا في مرحلة مبكرة.
يزحف محرّك بحث Google إلى ملفات SXG ويخزّنها مؤقتًا عندما تكون متاحة، ويجلب مسبقًا ملفات SXG التي يُرجّح أن يزورها المستخدم، مثل الصفحة المقابلة لنتيجة البحث الأولى.
تعمل حِزم SXG بشكل أفضل مع تحسينات الأداء الأخرى، مثل استخدام شبكات توصيل المحتوى (CDN) وتقليل الموارد الفرعية التي تحظر العرض. بعد تطبيق الآلية، اتّبِع هذه الاقتراحات للاستفادة إلى أقصى حدّ من تحسين سرعة عرض أكبر محتوى مرئي (LCP) من خلال الجلب المُسبق لملفات SXG. في كثير من الحالات، يمكن أن يؤدي هذا التحسين إلى تحميل الصفحات بشكل فوري تقريبًا من "بحث Google":
تأثير تنسيقات Signed Exchange
من خلال التجارب السابقة، لاحظنا انخفاضًا في سرعة عرض أكبر محتوى مرئي (LCP) يتراوح بين 300 ملّي ثانية و400 ملّي ثانية في المتوسط من عمليات الجلب المُسبق التي تم تفعيلها من خلال SXG. يساعد ذلك المواقع الإلكترونية في ترك انطباع أول أفضل لدى المستخدمين، وغالبًا ما يكون له تأثير إيجابي في مقاييس الأنشطة التجارية.
استفادت العديد من العلامات التجارية والمواقع الإلكترونية العالمية من ميزة Signed Exchanges. للاطّلاع على دراسة حالة، لنلقِ نظرة على كيفية مساعدة عمليات التبادل الموقَّعة لمنصة RebelMouse، وهي نظام بارز لإدارة المحتوى (CMS)، في تحسين أداء عملائها ومقاييس أنشطتهم التجارية:
- شركة Narcity تحسّن سرعة عرض أكبر محتوى مرئي (LCP) بنسبة %41
- لاحظت مجلة Paper Magazine زيادة بنسبة% 27 في عدد الجلسات لكل مستخدم
- مدوّنة MLT Blog تخفّض وقت تحميل الصفحة بنسبة %21
تبيّن لشركة Cloudflare أنّ SXG حسّنت مدة تحميل أول بايت (TTFB) في% 98 من المواقع الإلكترونية التي تم اختبارها، وحسّنت مقياس "سرعة أكبر جزء محتوى على الصفحة" (LCP) في% 85 من المواقع الإلكترونية، مع تحسّن متوسط يزيد عن% 20 في عمليات تحميل الصفحات المؤهلة لاستخدام SXG.
الفهرسة
لا يختلف ترتيب أو فهرسة الصفحة في "بحث Google" سواء كانت بتنسيق SXG أو بتنسيق آخر. إنّ SXG هي في النهاية آلية تسليم، ولا تغيّر المحتوى الأساسي.
AMP
يمكن عرض محتوى AMP باستخدام SXG. تسمح آلية SXG بالجلب المُسبق لمحتوى AMP وعرضه باستخدام عنوان URL الأساسي بدلاً من عنوان URL لصفحة AMP.وتتوفّر لصفحات AMP أدوات منفصلة لإنشاء ملفات SXG.تعرَّف على كيفية عرض صفحات AMP باستخدام Signed Exchange على amp.dev.
تصحيح أخطاء SXG باستخدام "أدوات مطوّري البرامج في Chrome"
للاطّلاع على SXG مباشرةً، استخدِم متصفّح Chromium وافتح "أدوات مطوّري البرامج"، ثم افتح "لوحة الشبكة" وانتقِل إلى مثال صفحة البحث هذه. يمكن تحديد Signed Exchanges من خلال البحث عن signed-exchange في عمود النوع.
توفّر علامة التبويب معاينة مزيدًا من المعلومات حول محتوى ملف SXG.
الأدوات
يتألف تنفيذ SXG من إنشاء SXG المقابل لعنوان URL معيّن ثم عرض SXG لمقدّمي الطلبات (عادةً برامج الزحف).
Cloud
لإنشاء SXG، ستحتاج إلى شهادة يمكنها توقيع ملفات SXG، مع العلم أنّ بعض الأدوات تحصل على هذه الشهادات تلقائيًا. تسرد هذه الصفحة هيئات إصدار الشهادات التي يمكنها إصدار هذا النوع من الشهادات. يمكن الحصول على الشهادات تلقائيًا من مرجع تصديق Google باستخدام أي برنامج ACME. يحتوي Web Packager Server على عميل ACME مدمج، وسيتوفّر قريبًا في sxg-rs.
أدوات SXG الخاصة بالمنصة
تتوافق هذه الأدوات مع حِزم تكنولوجية محدّدة. إذا كنت تستخدم بالفعل منصة تدعمها إحدى هذه الأدوات، فقد تجد أنه من الأسهل إعدادها من أداة للأغراض العامة.
يتم تشغيل
sxg-rs/cloudflare_workerعلى Cloudflare Workers.يتم تشغيل
sxg-rs/fastly_computeعلى Fastly Compute@Edge.Automatic Signed Exchanges هي ميزة في Cloudflare تحصل تلقائيًا على الشهادات وتنشئ Signed Exchanges.
تنشئ وحدة NGINX SXG ملفات SXG وتعرضها للمواقع الإلكترونية التي تستخدم nginx. يمكنك الاطّلاع على تعليمات الإعداد هنا.
Envoy SXG Filter تنشئ ملفات SXG وتعرضها للمواقع الإلكترونية التي تستخدم Envoy.
أدوات SXG للأغراض العامة
خادم HTTP sxg-rs
يعمل sxg-rs
http_server
كخادم وكيل عكسي
لعرض ملفات SXG. بالنسبة إلى الطلبات الواردة من برامج زحف SXG، سيوقّع http_server الردود الواردة من الخلفية ويردّ باستخدام SXG. للحصول على تعليمات التثبيت، يُرجى الاطّلاع على ملف README.
خادم Web Packager
خادم Web Packager،
webpkgserver، هو بديل لـ sxg-rs http_server، مكتوب بلغة Go. للحصول على
تعليمات حول إعداد خادم Web Packager، راجِع كيفية إعداد عمليات التبادل الموقَّعة
باستخدام Web Packager.
Web Packager CLI
تنشئ واجهة سطر الأوامر في Web Packager ملف SXG يتوافق مع عنوان URL معيّن.
webpackager \
--private\_key=private.key \
--cert\_url=https://example.com/certificate.cbor \
--url=https://example.com
بعد إنشاء ملف SXG، حمِّله إلى خادمك واعرضه باستخدام نوع MIME application/signed-exchange;v=b3. بالإضافة إلى ذلك، عليك عرض شهادة SXG على أنّها application/cert-chain+cbor.
مكتبات SXG
يمكن استخدام هذه المكتبات لإنشاء أداة إنشاء SXG خاصة بك:
sxg_rsهي مكتبة Rust لإنشاء ملفات SXG. وهي مكتبة SXG الأكثر غنى بالميزات وتُستخدم كأساس لأداتَيcloudflare_workerوfastly_compute.libsxgهي مكتبة C بسيطة لإنشاء ملفات SXG. ويتم استخدامها كأساس لوحدة NGINX SXG وفلتر Envoy SXG.go/signed-exchangeهي مكتبة Go بسيطة توفّرها مواصفات حزمة الويب كـمرجع تنفيذ لإنشاء ملفات SXG. ويتم استخدامها كأساس لأداة واجهة سطر الأوامر المرجعية،gen-signedexchangeوأدوات Web Packager الأكثر ثراءً بالميزات.
تفاوض المحتوى
يجب أن تعرض الخوادم ملفات SXG عندما يشير عنوان Accept إلى أنّ قيمة q لـ application/signed-exchange أكبر من أو تساوي قيمة q لـ text/html. من الناحية العملية، يعني ذلك أنّ خادم المصدر سيعرض SXG لبرامج الزحف، وليس للمتصفّحات. تنفّذ العديد من الأدوات المذكورة أعلاه هذا الإجراء تلقائيًا، ولكن بالنسبة إلى الأدوات الأخرى، يمكن استخدام التعبير العادي التالي لمطابقة عنوان Accept للطلبات التي يجب عرضها بتنسيق SXG:
http
Accept: /(^|,)\s\*application\/signed-exchange\s\*;\s\*v=[[:alnum:]\_-]+\s\*(,|$)/
يتضمّن هذا الاقتراح أمثلة على Apache وnginx.
تعديل واجهة برمجة التطبيقات الخاصة بذاكرة التخزين المؤقت
تتضمّن ذاكرة التخزين المؤقت لملفات SXG في Google واجهة برمجة تطبيقات يمكن لمالكي المواقع الإلكترونية استخدامها لإزالة ملفات SXG من ذاكرة التخزين المؤقت قبل انتهاء صلاحيتها بسبب Cache-Control: max-age. لمزيد من التفاصيل، يمكنك الاطّلاع على مرجع واجهة برمجة التطبيقات update cache.
الربط بملفات SXG
يمكن لأي موقع إلكتروني تخزين ملفات SXG مؤقتًا وعرضها وجلبها مسبقًا للصفحات التي يرتبط بها، حيثما كان ذلك متاحًا، باستخدام علامتَي و :
html
<a href="https://example.com/article.html.sxg">
<link rel="prefetch" as="document" href="https://example.com/article.html.sxg">
توضّح هذه المقالة كيفية استخدام nginx لتوزيع ملفات SXG.
مزايا فريدة
تُعدّ SXG إحدى التقنيات العديدة الممكنة لتفعيل الجلب المسبق المتعدّد المصادر. عند تحديد التكنولوجيا التي يجب استخدامها، قد تحتاج إلى الموازنة بين تحسين الجوانب المختلفة. توضّح الأقسام التالية بعض القيم الفريدة التي توفّرها SXG في مجال الحلول الممكنة. قد تتغيّر هذه العوامل بمرور الوقت مع تطوّر الحلول المتاحة.
طلبات أقل لعرض الإعلانات
عند استخدام ميزة الجلب المُسبَق على مستوى المواقع الإلكترونية، قد يحتاج الخادم إلى عرض طلبات إضافية. يتوافق ذلك مع الحالات التي تم فيها جلب الصفحة مسبقًا، ولكن لم يزر المستخدم الصفحة أو تعذّر عرض وحدات البايت التي تم جلبها مسبقًا للمستخدم. بالنسبة إلى SXG، يمكن تقليل هذه الطلبات الإضافية غير المستخدَمة بشكل كبير:
- يتم تخزين ملفات SXG مؤقتًا وقد يتم إرسالها إلى المستخدمين إلى أن تنتهي صلاحيتها. وبالتالي، يمكن لخادم ذاكرة التخزين المؤقت معالجة العديد من عمليات الجلب المُسبَق.
- يمكن عرض ملفات SXG للمستخدمين الذين يستخدمون ملفات تعريف الارتباط على موقعك الإلكتروني والذين لا يستخدمونها. وبالتالي، سيقلّ عدد المرات التي يجب فيها جلب الصفحة مرة أخرى بعد التنقّل.
تحسين سرعة الصفحة
قد تلاحظ تحسّنًا إضافيًا في سرعة الصفحة بفضل مساحات العرض والإمكانات التي تتيحها ميزة الجلب المُسبَق حاليًا:
- يمكن عرض ملفات SXG للمستخدمين الذين لديهم ملفات تعريف ارتباط لموقعك الإلكتروني.
- تُجري SXG أيضًا جلبًا مسبقًا للموارد الفرعية لصفحاتك، مثل JavaScript وCSS والخطوط والصور، عند تحديدها باستخدام عنوان
Link. - في المستقبل القريب، ستتوفّر ميزة الجلب المُسبق لملفات SXG من "بحث Google" في المزيد من أنواع نتائج البحث.
الخاتمة
عمليات التبادل الموقَّعة هي آلية تسليم تتيح التحقّق من مصدر المورد وصلاحيته بشكل مستقل عن طريقة تسليمه. نتيجةً لذلك، يمكن توزيع ملفات SXG من خلال جهات خارجية مع الحفاظ على إمكانية تحديد مصدر الناشر بالكامل.