مبادله‌های امضاشده (SXG)

SXG یک سازوکار تحویل است که امکان اصالت‌سنجی منبع یک منبع را مستقل از نحوه تحویل آن فراهم می‌کند.

Katie Hempenius
Katie Hempenius
Devin Mullins
Devin Mullins

مبادله‌های امضاشده (SXG) سازوکار ارائه‌ای است که امکان اصالت‌سنجی منبع منبع را مستقل از نحوه ارائه آن فراهم می‌کند. پیاده‌سازی SXG می‌تواند با فعال کردن پیش‌واکشی میان‌مبدئی حافظ حریم خصوصی، «بزرگ‌ترین نقاشی دارای محتوا» (LCP) را بهبود بخشد. علاوه‌براین، این جداسازی موارد استفاده مختلفی را مانند تجربه‌های اینترنتی آفلاین و ارائه از حافظه‌های پنهان طرف سوم پیش می‌برد.

این مقاله نمای کلی جامعی از SXG ارائه می‌دهد: نحوه عملکرد، موارد استفاده، و ابزارها.

سازگاری مرورگر

SXG توسط مرورگرهای مبتنی بر Chromium پشتیبانی می‌شود (از نسخه‌های: Chrome 73،‏ Edge 79، و Opera 64).

نمای کلی

SXG به‌عنوان مورد استفاده اصلی خود، از حافظه نهان برای واکشی پیشاپیش و ارائه محتوایی که به‌صورت رمزنگاری‌شده توسط مبدأ امضا شده است استفاده می‌کند. این کار به سرعت بخشیدن به پیمایش‌های میان‌مبدئی از سایت‌های ارجاع‌دهنده کمک می‌کند و درعین‌حال تضمین می‌کند که صفحه‌ها بدون تغییر باقی می‌مانند و به‌درستی به مبدأ خود نسبت داده می‌شوند. هرگونه اطلاعاتی که احتمالاً شناساننده باشد تا زمانی که کاربر به سایتی پیمایش نکند پنهان می‌ماند و از این طریق از حریم خصوصی کاربر محافظت می‌شود. «جستجوی Google» یکی از پذیرندگان آغازین قابلیت‌های واکشی پیشاپیش SXG است و برای سایت‌هایی که بخش بزرگی از ترافیک خود را از «جستجوی Google» دریافت می‌کنند، SXG می‌تواند ابزار مهمی برای ارائه بارگیری سریع‌تر صفحه به کاربران باشد. امیدواریم با گذشت زمان، این تأثیر به ارجاع‌دهندگان بیشتری گسترش یابد.

روش کار

سایت جفت درخواست/پاسخ («تبادل HTTP») را به‌گونه‌ای امضا می‌کند که مرورگر بتواند مبدأ و یکپارچگی محتوا را مستقل از نحوه توزیع محتوا درستی‌سنجی کند. درنتیجه، مرورگر می‌تواند نشانی وب سایت مبدأ را در نوار نشانی نمایش دهد، نه نشانی وب سروری که محتوا را ارائه کرده است.

نموداری که نحوه عملکرد «تبادلات امضاشده» را توضیح می‌دهد. مرورگر با حافظه پنهان ارتباط برقرار می‌کند و حافظه پنهان با سایت مقصد ارتباط برقرار می‌کند

در گذشته، تنها راهی که یک سایت می‌توانست از شخص ثالث برای توزیع محتوای خود استفاده کند و درعین‌حال ارجاع را حفظ کند، این بود که سایت گواهینامه‌های SSL خود را با توزیع‌کننده هم‌رسانی کند. این کار معایب امنیتی دارد؛ علاوه‌براین، با قابل‌انتقال کردن واقعی محتوا فاصله زیادی دارد.

قالب SXG

SXG در یک فایل کدگذاری‌شده دودویی کپسوله شده است که دو مؤلفه اصلی دارد: یک مبادله HTTP و یک امضا که مبادله را پوشش می‌دهد. تبادل HTTP شامل نشانی وب درخواست، اطلاعات مذاکره محتوا، و پاسخ HTTP است.

در اینجا نمونه‌ای از فایل SXG رمزگشایی‌شده آورده شده است.

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=&quot;https://test.web.app/ViFgi0WfQ-NotPJf8PBo2T5dEuZ13NdZefPybXq_HhE&quot;;
    date=1597680503;expires=1598285303;integrity=&quot;digest/mi-sha256-03&quot;;sig=<em>MEUCIQD5VqojZ1ujXXQaBt1CPKgJxuJTvFlIGLgkyNkC6d7LdAIgQUQ8lC4eaoxBjcVNKLrbS9kRMoCHKG67MweqNXy6wJg=</em>;
    validity-url=&quot;https://example.org/webpkg/validity&quot;
header integrity: sha256-Gl9bFHnNvHppKsv+bFEZwlYbbJ4vyf4MnaMMvTitTGQ=</p>

<p>The exchange has a valid signature.
payload [1256 bytes]:</p>
<pre class="prettyprint"><code>&lt;title&gt;SXG example&lt;/title&gt;
&lt;meta charset=&#34;utf-8&#34;&gt;
&lt;meta http-equiv=&#34;Content-type&#34; content=&#34;text/html; charset=utf-8&#34;&gt;
&lt;style type=&#34;text/css&#34;&gt;
body {
    background-color: #f0f0f2;
    margin: 0;
    padding: 0;
}
&lt;/style&gt;
</code></pre>
<div>
    <h1>Hello</h1>
</div>

<p>

پارامتر expires در امضا نشان‌دهنده تاریخ انقضای SXG است. SXG ممکن است حداکثر ۷ روز معتبر باشد. اطلاعات بیشتر درباره سرصفحه امضا را در مشخصات Signed HTTP Exchanges پیدا کنید.

پشتیبانی از شخصی‌سازی سمت سرور

SXG حاوی سرصفحه Vary: Cookie فقط به کاربرانی نشان داده می‌شود که برای نشانی وب درخواست امضاشده کوکی ندارند. اگر سایت شما HTML متفاوتی را به کاربران واردشده به سیستم ارائه می‌دهد، می‌توانید از این ویژگی برای بهره‌مندی از SXG بدون تغییر آن تجربه استفاده کنید. جزئیات مربوط به شخصی‌سازی سمت سرور با SXG پویا را ببینید.

بسته‌بندی وب

SXG بخشی از خانواده پیشنهادی مشخصات گسترده‌تر Web Packaging است. علاوه‌بر SXG، مؤلفه اصلی دیگر مشخصات Web Packaging، Web Bundles («مبادله‌های HTTP دسته‌ای») است. «دسته‌های وب» مجموعه‌ای از منابع HTTP و فراداده‌های لازم برای تفسیر دسته است.

رابطه بین SXG و «بسته‌های وب» معمولاً باعث سردرگمی می‌شود. SXG و Web Bundles دو فناوری متمایز هستند که به یکدیگر وابسته نیستند—Web Bundles را می‌توان با مبادله‌های امضاشده و امضانشده استفاده کرد. هدف مشترکی که هم SXG و هم Web Bundles دنبال می‌کنند، ایجاد قالب «بسته‌بندی وب» است که امکان هم‌رسانی کامل سایت‌ها را برای استفاده آفلاین فراهم می‌کند.

افزایش سرعت بار کردن صفحه با «تبادلات امضاشده»

فعال کردن «تبادلات امضاشده» می‌تواند به افزایش سرعت عملکرد صفحه وب کمک کند و درنتیجه بر «هسته‌های حیاتی وب» سایت شما، به‌ویژه بزرگ‌ترین نقاشی دارای محتوا (LCP)، تأثیر بگذارد. به‌عنوان پذیرنده آغازین، «جستجوی Google» از SXG استفاده می‌کند تا تجربه بار کردن سریع‌تر صفحه را برای صفحه‌های بارشده از صفحه نتایج جستجو به کاربران ارائه دهد.

«جستجوی Google» درصورت دردسترس بودن SXG، آن را می‌خزد و در حافظه پنهان ذخیره می‌کند و SXG را که احتمالاً کاربر از آن بازدید می‌کند (برای مثال، صفحه مربوط به اولین نتیجه جستجو) پیش‌واکشی می‌کند.

SXG بهترین عملکرد را در ترکیب با سایر بهینه‌سازی‌های عملکرد مانند استفاده از CDN و کاهش زیرمنابع مسدودکننده رندر دارد. پس‌از پیاده‌سازی، این توصیه‌ها را دنبال کنید تا مزیت LCP را از SXGهای پیش‌واکشی‌شده به حداکثر برسانید. در بسیاری از موارد، چنین بهینه‌سازی‌ای می‌تواند منجر به بار شدن تقریباً فوری صفحه از «جستجوی Google» شود:

تأثیر «تبادلات امضاشده»

از آزمایش‌های قبلی، به‌طور متوسط ۳۰۰ تا ۴۰۰ میلی‌ثانیه کاهش در LCP از پیش‌واکشی‌های فعال‌شده با SXG مشاهده کرده‌ایم. این کار به سایت‌ها کمک می‌کند تأثیر اولیه بهتری بر کاربران بگذارند و اغلب تأثیر مثبتی بر سنجه‌های کسب‌وکار دارد.

چندین نمانام و سایت جهانی ازقبل از «تبادلات امضاشده» بهره‌مند شده‌اند. به‌عنوان یک مطالعه موردی، بیایید ببینیم که چگونه پیاده‌سازی «تبادل‌های امضاشده» به RebelMouse، یک «سیستم مدیریت محتوا» (CMS) برجسته، کمک کرد تا عملکرد و سنجه‌های کسب‌وکار مشتریان خود را بهبود بخشد:

  • ‫Narcity بزرگ‌ترین نقاشی دارای محتوا را تا ۴۱٪ بهبود داد
  • Paper Magazine متوجه افزایش ۲۷ درصدی در تعداد جلسه به‌ازای هر کاربر شد
  • MLT Blog زمان بار کردن صفحه را ۲۱٪ کاهش داد

Cloudflare متوجه شد که SXG زمان رسیدن اولین بایت را برای ۹۸٪ از سایت‌هایی که آزمایش کرده بود بهبود بخشید و بزرگ‌ترین رنگ محتوایی را برای ۸۵٪ از سایت‌ها بهبود بخشید، با بهبود متوسط بیش‌از ۲۰٪ در بارگیری‌های صفحه واجدشرایط SXG.

فهرست‌سازی

«جستجوی Google» نمایش‌های SXG و غیرSXG صفحه را به‌طور متفاوت رتبه‌بندی یا نمایه‌سازی نمی‌کند. SXG درنهایت یک سازوکار تحویل است—محتوای اصلی را تغییر نمی‌دهد.

AMP

محتوای AMP را می‌توان بااستفاده از SXG ارائه کرد. SXG به محتوای AMP اجازه می‌دهد پیش‌واکشی شود و بااستفاده از نشانی وب متعارف آن نمایش داده شود، نه نشانی وب AMP آن.AMP ابزار جداگانه خود را برای تولید SXG دارد.با نحوه ارائه AMP بااستفاده از مبادلات امضاشده در amp.dev آشنا شوید.

اشکال‌زدایی SXG با Chrome DevTools

برای دیدن SXG به‌طور مستقیم، از مرورگر Chromium استفاده کنید، DevTools را باز کنید، پانل «شبکه» را باز کنید، و از این صفحه جستجوی نمونه بازدید کنید. «تبادلات امضاشده» را می‌توان با جستجوی signed-exchange در ستون نوع شناسایی کرد.

نماگرفتی که درخواست SXG را در پانل «شبکه» در DevTools نشان می‌دهد
پانل شبکه در DevTools

برگه پیش‌نمایش اطلاعات بیشتری درباره محتوای SXG ارائه می‌دهد.

نماگرفت برگه «پیش‌نمایش» برای SXG
زبانه پیش‌نمایش در DevTools

ابزارسازی

پیاده‌سازی SXG شامل تولید SXG مربوط به نشانی وب داده‌شده و سپس ارائه آن SXG به درخواست‌کنندگان (معمولاً خزنده‌ها) است.

گواهی‌نامه‌ها

برای تولید SXG به گواهینامه‌ای نیاز دارید که بتواند SXG را امضا کند، هرچند برخی‌از ابزارها این کار را به‌طور خودکار انجام می‌دهند. این صفحه مراجع صدور گواهینامه‌ای را که می‌توانند این نوع گواهینامه را صادر کنند فهرست می‌کند. گواهینامه‌ها را می‌توان به‌طور خودکار از مرجع صدور گواهینامه Google بااستفاده از هر کارخواه ACME دریافت کرد. Web Packager Server دارای یک کارخواه ACME داخلی است و sxg-rs نیز به‌زودی آن را خواهد داشت.

ابزار SXG مختص پلاتفرم

این ابزارها از پشته‌های فناوری خاصی پشتیبانی می‌کنند. اگر از پلاتفرمی استفاده می‌کنید که یکی از این ابزارها از آن پشتیبانی می‌کند، ممکن است راه‌اندازی آن برایتان آسان‌تر از ابزار چندمنظوره باشد.

ابزار SXG همه‌منظوره

سرور sxg-rs HTTP

sxg-rs http_server به‌عنوان پراکسی معکوس برای ارائه SXG عمل می‌کند. برای درخواست‌های خزنده‌های SXG،‏ http_server پاسخ‌های دریافتی از پس‌رانه را امضا می‌کند و با SXG پاسخ می‌دهد. برای دستورالعمل‌های نصب، README را ببینید.

سرور Web Packager

Web Packager Server، webpkgserver، جایگزینی برای sxg-rs http_server است که به زبان Go نوشته شده است. برای دستورالعمل‌های راه‌اندازی سرور Web Packager، به نحوه راه‌اندازی تبادل‌های امضاشده بااستفاده از Web Packager مراجعه کنید.

Web Packager CLI

Web Packager CLI یک SXG مطابق با نشانی وب داده‌شده تولید می‌کند.

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 Filter استفاده می‌شود.

  • go/signed-exchange یک کتابخانه Go حداقلی است که توسط مشخصات webpackage به‌عنوان پیاده‌سازی مرجع تولید SXG ارائه شده است. این ابزار به‌عنوان پایه ابزار مرجع میانای خط فرمان آن، gen-signedexchange و ابزارهای Web Packager با ویژگی‌های بیشتر استفاده می‌شود.

مذاکره محتوا

وقتی سرصفحه Accept نشان می‌دهد که مقدار q برای application/signed-exchange بزرگ‌تر یا مساوی مقدار q برای text/html است، سرورها باید SXG ارائه دهند. در عمل، این یعنی سرور مبدأ SXG را به خزنده‌ها ارائه می‌دهد، نه مرورگرها. بسیاری از ابزارهای بالا این کار را به‌طور پیش‌فرض انجام می‌دهند، اما برای ابزارهای دیگر، می‌توان از عبارت باقاعده زیر برای مطابقت دادن سرصفحه Accept درخواست‌هایی که باید به‌عنوان SXG ارائه شوند استفاده کرد: http Accept: /(^|,)\s\*application\/signed-exchange\s\*;\s\*v=[[:alnum:]\_-]+\s\*(,|$)/

این توصیه شامل نمونه‌هایی برای Apache و nginx است.

میانای برنامه‌سازی کاربردی به‌روزرسانی حافظه نهان

«حافظه نهان SXG» در Google دارای میانای برنامه‌سازی کاربردی است که مالکان سایت می‌توانند از آن برای برداشتن SXG از حافظه نهان قبل‌از منقضی شدن به‌دلیل Cache-Control: max-age استفاده کنند. برای جزئیات، مرجع میانای برنامه‌سازی کاربردی به‌روزرسانی حافظه نهان را ببینید.

پیوند دادن به 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 همچنین زیرمنابع صفحه‌هایتان را، مثل جاوا اسکریپت، CSS، قلم‌ها، و تصاویر، وقتی بااستفاده از سرصفحه Link مشخص شده باشند، پیش‌واکشی می‌کند.
  • در آینده نزدیک، پیش‌واکشی SXG از «جستجوی Google» در انواع بیشتری از نتایج جستجو دردسترس خواهد بود.

نتیجه‌گیری

«تبادل‌های امضاشده» سازوکار تحویلی است که امکان درستی‌سنجی کردن منبع و اعتبار منبع را مستقل از نحوه تحویل منبع فراهم می‌کند. درنتیجه، SXG می‌تواند توسط طرف‌های سوم توزیع شود و درعین‌حال انتساب کامل ناشر حفظ شود.

مطالعه بیشتر