המרות חתומות (SXG)

SXG הוא מנגנון מסירה שמאפשר לאמת מקור של משאב, בנפרד מאופן ההעברה שלו.

Katie Hempenius
Katie Hempenius
Devin Mullins
Devin Mullins

Exchanges חתומים (SXG) הם מנגנון מסירה שמאפשר לאמת את מקור המשאב ללא קשר לאופן שבו נשלח. הטמעה של SXG יכולה לשפר את Largest Contentful Paint (LCP) על ידי הפעלה של שליפה מראש (prefetch) ממקורות שונים תוך שמירה על הפרטיות. בנוסף, הפענוח הזה מקדם מגוון של תרחישים לדוגמה, כמו חוויית משתמש באינטרנט אופליין והצגה ממטמון של צדדים שלישיים.

המאמר הזה מספק סקירה כללית מקיפה של SXG: איך הוא עובד, תרחישים לדוגמה וכלים ספציפיים.

תאימות דפדפן

SXG נתמך על ידי דפדפנים המבוססים על Chromium (גרסאות מתחילות בגרסאות: Chrome 73, Edge 79 ו-Opera 64).

סקירה כללית

בתרחיש העיקרי לדוגמה, SXG משתמש במטמון כדי לאחזר מראש ולהציג תוכן שנחתם באופן קריפטוגרפי על ידי המקור. כך ניתן לנווט במהירות בין מקורות שונים מאתרים מפנים, ובמקביל להבטיח שהדפים לא בוצעו בהם שינויים ושהם משויכים כראוי למקור שלהם. כל מידע שעשוי להיות מזהה מוסתר עד שהמשתמש עובר לאתר, ובכך מגן על פרטיות המשתמש. חיפוש Google הוא בין הראשונים שמשתמשים ביכולות השליפה מראש של SXG. כשמדובר באתרים שמקבלים חלק גדול מתנועת הגולשים מחיפוש Google, SXG יכול להיות כלי חשוב שמאפשר למשתמשים לטעון דפים מהר יותר. עם הזמן, אנחנו מקווים שההשפעה הזו תתרחב לגורמים מפנים נוספים.

איך זה עובד

אתר חותם על צמד בקשה/תגובה ("המרת HTTP") באופן שמאפשר לדפדפן כדי לאמת את המקור והתקינות של התוכן בנפרד האופן שבו התוכן הופץ. כתוצאה מכך, הדפדפן יכול להציג את כתובת האתר את אתר המקור בסרגל הכתובות ולא את כתובת ה-URL של השרת שלח את התוכן.

תרשים שמסביר איך פועלות המרות חתומות. דפדפן שמתקשר עם המטמון שמתקשר עם אתר היעד

מבחינה היסטורית, הדרך היחידה לשימוש עם צד שלישי להפצת התוכן שלו תוך שמירה על היה שיתוף של אישורי ה-SSL שלו עם האתר מפיץ. יש לכך חסרונות אבטחה: מעבר לזה, ביצירת תוכן לנייד באמת.

פורמט SXG

SXG מוקף בקובץ בקידוד בינארי שיש בו רכיבים ראשיים: חילופי HTTP חתימה שמכסה את הבורסה. בורסת HTTP מורכבת מכתובת URL של בקשה, תוכן פרטי משא ומתן ותגובת 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 עשוי להיות תקף ל-7 ימים לכל היותר. ניתן למצוא מידע נוסף על כותרת החתימה ב-Signature HTTP Exchanges .

תמיכה בהתאמה אישית בצד השרת

SXG שמכיל את הכותרת Vary: Cookie יוצג רק למשתמשים שלא מכילים קובצי cookie לכתובת ה-URL החתומה של הבקשה. אם באתר מוצג קוד HTML שונה למשתמשים שמחוברים לחשבון שלו, תוכלו להשתמש בתכונה הזו כדי לנצל את היתרונות של SXG בלי לשנות את החוויה הזו. מידע נוסף על התאמה אישית בצד השרת עם SXG דינמי.

אריזה באינטרנט

SXG הוא חלק מהפלטפורמה משפחה של הצעות למפרטים של האריזה. כמו כן ל-SXG, הרכיב העיקרי הנוסף במפרט של אריזת אינטרנט הוא Web Bundles ("חילופי HTTP בחבילה"). חבילות אינטרנט הן אוסף של משאבי HTTP את המטא-נתונים שדרושים כדי לפרש את החבילה.

הקשר בין SXG לבין Web Bundles הוא סיבה נפוצה לבלבול. SXG ו-Web Bundle הן שתי טכנולוגיות נפרדות שלא תלויות בכל אחת מהטכנולוגיות other – ניתן להשתמש ב-Web Bundles עם החלפות חתומות וגם עם החלפות לא חתומות. יעד שמתקדם באמצעות SXG וחבילות אינטרנט הוא יצירה של 'אריזת אינטרנט' שמאפשר שיתוף של אתרים במלואם לצריכה באופן לא מקוון.

האצת עומסי דפים באמצעות Exchange חתומות

הפעלה של המרות חתומות יכולה להאיץ את הביצועים של דפי אינטרנט ולהשפיע על מדדי הליבה לבדיקת חוויית המשתמש באתר שלכם, במסגרת המהירות שבה נטען רכיב התוכן הכי גדול (LCP). בין מראשוני המשתמשים, חיפוש Google משתמש ב-SXG כדי לספק למשתמשים חוויה מהירה יותר של טעינת דפים בדפים שנטענים מדף תוצאות החיפוש.

חיפוש Google סורק ושומר במטמון SXG כאשר הוא זמין, ומאחזר מראש SXG שהמשתמש צפוי לבקר בו - לדוגמה, הדף התואם לתוצאת החיפוש הראשונה.

SXG פועל בצורה הטובה ביותר במקביל לאופטימיזציות אחרות של ביצועים, כמו שימוש ברשתות CDN וצמצום משאבי משנה שחוסמים רינדור. לאחר ההטמעה, כדאי ליישם את ההמלצות האלה כדי למקסם את התועלת של ה-LCP משליפה מראש של SXG. במקרים רבים, אופטימיזציה כזו יכולה לגרום לטעינות כמעט מיידיות של דפים מחיפוש Google:

ההשפעה של בורסות חתומות

בניסויים קודמים ראינו ירידה ממוצעת של 300 אלפיות השנייה עד 400 אלפיות שנייה ב-LCP כתוצאה משליפה מראש (prefetch) שתומכת ב-SXG. כך אתרים יכולים ליצור רושם ראשוני טוב יותר על המשתמשים, והרבה פעמים יש לכך השפעה חיובית על המדדים העסקיים.

מספר מותגים ואתרים גלובליים כבר נהנו מהתכונה 'בורסות חתומות'. כמקרה לדוגמה, נבחן איך ההטמעה של 'החלפה חתומה' עזרה ל-RebelMouse, מערכת ניהול תוכן חשובה (CMS) לשפר את ביצועי הלקוחות ביצועים ומדדים עסקיים:

  • Narcity שיפרה את מדד ה-LCP ב-41%
  • ב-Paper Magazine נרשמה עלייה של 27% במספר הסשנים לכל משתמש
  • זמן הטעינה של הדף הופחת ב-21% בבלוג MLT

Cloudflare גילתה ש-SXG שיפר את ה-TTDFB ב-98% מהאתרים שבדקתי, וגם שיפר את מדד ה-LCP ב-85% מהאתרים, עם שיפור חציוני של יותר מ-20% בטעינות הדפים שעומדים בדרישות ל-SXG.

הוספה לאינדקס

הייצוגים SXG ושאינם SXG של דף לא מדורגות או נוספו לאינדקס באופן שונה בחיפוש Google. SXG הוא בסופו של דבר מנגנון להעברה — לשנות את התוכן הבסיסי.

AMP

ניתן להעביר תוכן AMP באמצעות SXG. SXG מאפשר שליפה מראש של תוכן AMP ומוצגים באמצעות כתובת ה-URL הקנונית, ולא באמצעות כתובת ה-URL של ה-AMP.ל-AMP יש כתובת URL נפרדת כלים ליצירת SXG.כאן תוכלו לקרוא איך להציג AMP באמצעות המרות חתומות ב- amp.dev.

ניפוי באגים בנכסי SXG באמצעות כלי פיתוח ל-Chrome

כדי לראות תמונה של SXG באופן אישי, צריך להשתמש בדפדפן Chromium, לפתוח את כלי הפיתוח, לפתוח את החלונית 'רשת' ולהיכנס לדף החיפוש לדוגמה. כדי לזהות המרות חתומות, מחפשים את signed-exchange בעמודה סוג.

צילום מסך שבו מוצגת בקשת SXG בתוך ה&#39;רשת&#39; חלונית בכלי פיתוח
החלונית Network ב'כלי פיתוח'

בכרטיסייה תצוגה מקדימה מוצג מידע נוסף על התוכן של SXG.

צילום מסך של &#39;תצוגה מקדימה&#39; כרטיסייה של SXG
הכרטיסייה תצוגה מקדימה בכלי הפיתוח

כלים

הטמעת SXG כוללת יצירה של ה-SXG התואם לכתובת URL נתונה ולאחר מכן להציג את ה-SXG הזה למגישי הבקשות (בדרך כלל סורקים).

אישורים

כדי ליצור SXG, אתם זקוקים לאישור עם חתימה על SXG, למרות שיש כלים שרוכשים אותם באופן אוטומטי. בדף הזה מפורטות רשויות האישורים שיכולות להנפיק לכם אישור מהסוג הזה. אפשר לקבל אישורים באופן אוטומטי מרשות האישורים של Google באמצעות כל לקוח ACME. לשרת Web Packager יש לקוח ACME מובנה, ובקרוב sxg-rs יפעל.

כלי SXG ספציפיים לפלטפורמה

הכלים האלה תומכים בסטאקציות של טכנולוגיות ספציפיות. אם אתה כבר משתמש ייתכן שיהיה לכם קל יותר להגדיר פלטפורמה כזו שנתמכת על ידי אחד מהכלים האלה לכלי לשימוש כללי.

כלי SXG לשימוש כללי

שרת HTTP של sxg-rs

SXg-rs http_server משמש כשרת proxy הפוך שמגישים SXG. עבור בקשות שנשלחות מהסורקים של SXG, האפליקציה http_server תחתום על מהקצה העורפי, ולהשיב באמצעות SXG. להתקנה הוראות מפורטות README.

שרת Web Packager

חבילות האינטרנט Server, webpkgserver, הוא חלופה ל-sxg-rs http_server, שכתוב ב-Go. עבור להוראות להגדרת שרת Web Packager, ראה כיצד להגדיר המרות באמצעות Web Packager.

CLI של Web Packager

ה-Web Packager CLI יוצר 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 עבור וליצור SXGs. זוהי ספריית SXG עם הכי הרבה תכונות והיא משמשת לשימוש בכלים cloudflare_worker ו-fastly_compute.

  • libsxg היא ספריית C מינימלית עבור וליצור SXGs. הוא משמש כבסיס למודול NGINX SXG מסנן Envoy SXG.

  • go/signed-exchange היא ספריית Go מינימלית שמסופקת על ידי המפרט של webpackage קובץ עזר של וליצור SXGs. הוא משמש כבסיס לכלי ה-CLI להפניות שלו, gen-signedexchange והכלים המתקדמים יותר Web Packager.

משא ומתן על תוכן

השרתים צריכים להציג SXG כשהכותרת Accept (אישור) מציינת שה-q-value של application/signed-exchange גדול מ-q-value של טקסט/html או שווה לו. בפועל, המשמעות היא ששרת מקור יציג SXG לסורקים, אבל לא לדפדפנים. רבים מהכלים שלמעלה עושים זאת כברירת מחדל, אבל בכלים אחרים, אפשר להשתמש בביטוי הרגולרי הבא כדי להתאים לכותרת 'אישור' של בקשות שאמורות להיות מוצגות כ-SXG: http Accept: /(^|,)\s\*application\/signed-exchange\s\*;\s\*v=[[:alnum:]\_-]+\s\*(,|$)/

ההמלצה הזו כוללת דוגמאות ל-Apache ול-nginx.

עדכון המטמון API

במטמון SXG של Google יש API שבעלי אתרים יכולים להשתמש בו כדי להסיר מהמטמון SXG לפני שהתוקף שלהם פג בגלל Cache-Control: max-age. פרטים נוספים זמינים בחומר העזר בנושא API לעדכון המטמון.

קישור אל 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 היא אחת מהטכנולוגיות הרבות האפשריות שמאפשרות שליפה מראש (prefetch) ממקורות שונים. כשאתם מחליטים באיזו טכנולוגיה להשתמש, ייתכן שתצטרכו לבחור בין אופטימיזציה של היבטים שונים. הקטעים הבאים ממחישים כמה מהערכים הייחודיים ש-SXG מספק במסגרת הפתרונות האפשריים. הגורמים האלה עשויים להשתנות עם הזמן, ככל שמרחב הפתרונות הזמינים מתפתח.

פחות בקשות להצגה

באמצעות שליפה מראש (prefetch) מאתרים שונים, יכול להיות שהשרת שלכם יצטרך למלא בקשות נוספות. הנתון הזה תואם למקרים שבהם דף כלשהו נשלף מראש, אבל המשתמש לא ביקר בדף או שהבייטים שנשלפו מראש לא הוצגו למשתמש. עבור SXG, ניתן לצמצם באופן משמעותי את הבקשות הנוספות הבאות שלא נעשה בהן שימוש:

  • קישורי SXG נשמרים במטמון ועשויים להישלח למשתמשים עד שהתוקף שלהם יפוג. לכן, יש הרבה שליפה מראש (prefetch) שניתן לטפל בה רק על ידי שרת המטמון.
  • ניתן להציג SXG למשתמשים עם או בלי קובצי Cookie באתר שלכם. לכן, יהיו פחות מקרים שבהם יהיה צורך לאחזר שוב את הדף לאחר הניווט.

שיפור מהירות הדף

יכול להיות שתראו שיפור נוסף במהירות הדפים בגלל היכולות והפלטפורמות של השליפה מראש שנתמכות כרגע:

  • ניתן להציג SXG למשתמשים עם קובצי cookie לאתר שלך.
  • כשמשתמשים ב-SXG, המערכת מאחזרת מראש משאבי משנה לדפים, כמו JavaScript, CSS, גופנים ותמונות, כשהיא מוגדרת באמצעות הכותרת Link.
  • בעתיד הקרוב, שליפה מראש של SXG מחיפוש Google תהיה זמינה בסוגים נוספים של תוצאות חיפוש.

סיכום

העברות חתומות הן מנגנון מסירה שמאפשר לאמת את המקור והחוקיות של המשאב, בנפרד מהאופן שבו המשאב נמסר. כתוצאה מכך, צדדים שלישיים יכולים להפיץ SXG לשמור על ייחוס מלא של בעל תוכן דיגיטלי.

קריאה נוספת