כותרת תגובת HTTP חדשה להגבלת כתיבת סקריפטים ברמת הדומיין ולבקשת משאבים ייעודיים מהדפדפן.
Origin-Agent-Cluster
היא כותרת תגובה חדשה של HTTP, שמנחה את הדפדפן למנוע
גישה סינכרונית באמצעות כתיבת סקריפט בין דפים ממקורות שונים באותו אתר. גם דפדפנים יכולים להשתמש
Origin-Agent-Cluster
כרמז לכך שהמקור צריך לקבל משאבים נפרדים משלו, כמו
תהליך ייעודי.
תאימות דפדפן
בשלב הזה, הכותרת Origin-Agent-Cluster
מוטמעת רק ב-Chrome 88 ואילך. הוא תוכנן
בשיתוף פעולה הדוק עם נציגים מ-Mozilla Firefox שסימנו אותו כשווה ערך
ליצור את האב טיפוס, ויש לו
ערך חיובי ראשוני
קליטה
של WebKit, מנוע הדפדפן שמשמש את Safari.
אבל בינתיים, אין בעיה בפריסת הכותרת Origin-Agent-Cluster
בכל
משתמשים כיום. דפדפנים שלא מבינים את ההודעה, פשוט יתעלמו ממנה. ומכיוון שדפים ב-
אשכולות סוכנים המשויכים למקור יכולים לבצע פחות פעולות מאשר אשכולות עם קידוד לפי אתר
כברירת מחדל), אין בעיה של יכולת פעולה הדדית.
למה דפדפנים לא יכולים להפריד באופן אוטומטי מקורות של אותו אתר
האינטרנט מבוסס על מדיניות המקור הזהה, שהיא תכונת אבטחה
מגביל את האופן שבו מסמכים וסקריפטים יכולים לקיים אינטראקציה עם משאבים
origin. לדוגמה, דף המתארח בכתובת https://a.example
נמצא
מקור שונה מקוד אחד ב-https://b.example
או במקור ב-https://sub.a.example
.
מאחורי הקלעים, דפדפנים מפרידים בין המקורות בדרכים שונות. בממשק הישן ימים, למרות שמקורות נפרדים לא יוכלו לגשת לנתונים אחד של השני, הם עדיין לשתף משאבים כמו שרשורים של מערכת ההפעלה, תהליכים והקצאת זיכרון. כלומר, אם כרטיסייה אחת הייתה איטית, היא הייתה מאטה את כל שאר הכרטיסיות. לחלופין, אם כרטיסייה אחת משתמשת ביותר מדי זיכרון, תגרום לקריסת הדפדפן כולו.
הדפדפנים כיום הם מתוחכמים יותר, ומנסים להפריד בין מקורות שונים תהליכים. אופן הפעולה הזה משתנה בהתאם לדפדפן: ברוב הדפדפנים יש הפרדה מסוימת בין כרטיסיות, אך מסגרות iframe שונות בתוך כרטיסייה אחת עשויות לחלוק תהליך. ובגלל שהתהליכים בגלל תקורת הזיכרון, הם משתמשים בהיוריסטיקה כדי למנוע יותר מדי זיכרון: למשל, Firefox כולל מגבלת תהליך שהמשתמש יכול להגדיר, ו-Chrome משתנה בין מחשבים (שבהם יש יותר זיכרון) לבין מכשיר נייד (שבהם כמעט).
ההיוריסטיקה האלה לא מושלמת. ויש להם מגבלה חשובה:
חריגים למדיניות המקור הזהה שמאפשרת לתת-דומיינים כמו https://sub.a.example
וגם
https://a.example
כדי לתקשר זה עם זה, דפדפנים לא יכולים להפריד באופן אוטומטי תת-דומיינים מתוך
שתי רשתות נוירונים זו מול זו.
התנהגות ברירת המחדל הזו נקראת 'אשכולות סוכנים המשויכים לאתר': כלומר, הדפדפן מקבץ דפים
באתר שלהם. בכותרת החדשה של Origin-Agent-Cluster
מוצגת בקשה לשנות את ברירת המחדל בדפדפן
של דף נתון, הכנסתו לאשכול סוכנים המשויכים למקור, כך שהוא יקובץ
רק לדפים אחרים מאותו מקור. באופן ספציפי, דפים ממקורות שונים מאותו אתר
יוחרג מאשכול הסוכנים.
הפרדת הבעת ההסכמה הזו מאפשרת לדפדפנים לתת לאשכולות הסוכנים החדשים האלה המשויכים למקור משלהם
משאבים ייעודיים, שלא משולבים עם מקורות מידע אחרים. לדוגמה, דפים כאלה
יכולים ליצור תהליך משלהם או לתזמן אותם בשרשורים נפרדים. על ידי הוספת
הכותרת Origin-Agent-Cluster
לדף שלך, אתה מציין לדפדפן שהדף
להפיק תועלת ממשאבים ייעודיים כאלה.
עם זאת, כדי לבצע את ההפרדה וליהנות מהיתרונות האלה, הדפדפן צריך להשבית חלק מהתכונות מהדור הקודם.
מה לא ניתן לעשות בדפים עם קידוד לפי מקור
כשהדף שלכם נמצא באשכול סוכנים המשויכים למקור, אתם מוותרים על יכולות מסוימות לדבר עם אותו אתר דפים ממקורות שונים שהיו זמינים בעבר. הקפידו במיוחד על הדברים הבאים:
אין לך יותר אפשרות להגדיר
document.domain
זהו תכונה מדור קודם שבדרך כלל מאפשרת לדפים ממקורות שונים באותו אתר לגשת לכל אחד מהם באופן סינכרוני ב-DOM של אחרים, אבל באשכולות סוכנים המשויכים למקור, הוא מושבת.אין לך יותר אפשרות לשלוח
WebAssembly.Module
אובייקטים לדפים אחרים ממקורות שונים באותו אתר דרךpostMessage()
.(Chrome בלבד) כבר אי אפשר לשלוח
SharedArrayBuffer
אוWebAssembly.Memory
אובייקטים לדפים אחרים ממקורות שונים באותו אתר.
מתי כדאי להשתמש באשכולות סוכנים המשויכים למקור
המקורות שמהם מפיקים הכי הרבה תועלת מהכותרת Origin-Agent-Cluster
הם:
להשיג את הביצועים הטובים ביותר בעזרת המשאבים הייעודיים שלהם, כשהדבר אפשרי. לדוגמה: משחקים עתירי ביצועים, אתרים לשיחות ועידה בווידאו או אפליקציות ליצירת מולטימדיה.
מכיל מסגרות iframe שצורכות משאבים רבים ממקורות שונים, אבל באותו אתר. לדוגמה, אם ב-
https://mail.example.com
מוטמעhttps://chat.example.com
iframes, קוד מקורhttps://mail.example.com/
מוודא שהקוד שנכתב על ידי צוות הצ'אט לא יכול בטעות להפריע לקוד שנכתב על ידי צוות הדואר, ולרמז על כך לדפדפן כדי לתזמן אותן בנפרד ולצמצם את השפעת הביצועים שלהן אחת על השנייה.מצפים להיות מוטמעים בדפים ממקור אחר באותו אתר, אבל יודעים שהם מוטמעים עתיר משאבים. לדוגמה, אם
https://customerservicewidget.example.com
מצפה להשתמש משאבים רבים לווידאו צ'אט, שיוטמעו במקורות שוניםhttps://*.example.com
, הצוות שמנהל את הווידג'ט הזה יכול להשתמש ברכיבOrigin-Agent-Cluster
כדי לנסות להפחית את השפעת הביצועים שלהם על כלי הטמעה.
בנוסף, עליך לוודא שמקובל עליך להשבית את המודעות שמופיעות לעיתים רחוקות, בתכונות של תקשורת בין מקורות, ושהאתר שלכם משתמש HTTPS.
אבל בסופו של דבר, אלה רק הנחיות. אם אשכולות סוכנים המשויכים למקור יעזרו לאתר שלך או לא ייקבע בדרך הטובה ביותר באמצעות מדידות. באופן ספציפי, צריך למדוד מדדי חוויית המשתמש, ואולי גם את הזיכרון בשימוש, כדי לראות את ההשפעה של קידוד לפי מקור. (שימוש בזיכרון במשך במיוחד הוא חשש משמעותי, מפני שהגדלת מספר התהליכים להפעלה עלולה לגרום תקורת זיכרון לכל תהליך). לא צריך פשוט לפרוס את קוד המקור ולקוות לטוב.
איך זה קשור לבידוד בין מקורות?
קידוד המקור של אשכולות סוכנים באמצעות הכותרת Origin-Agent-Cluster
קשור אבל נפרד
מבידוד בין מקורות דרך Cross-Origin-Opener-Policy
וגם
Cross-Origin-Embedder-Policy
כותרות.
כל אתר שיגרום לבידוד חוצה-מקורות להשבית גם את אותו אותו אתר ממקור אחר
תכונות תקשורת כמו בשימוש בכותרת Origin-Agent-Cluster
. אבל,
הכותרת Origin-Agent-Cluster
עדיין יכולה להיות שימושית בנוסף לבידוד ממקורות שונים,
רמז לדפדפן כדי לשנות את היוריסטיקה שלו להקצאת המשאבים. אז עדיין כדאי לחשוב
החלת הכותרת Origin-Agent-Cluster
ומדידת התוצאות, גם בדפים
כבר מבודד ממקורות שונים.
איך להשתמש בכותרת Origin-Agent-Cluster
כדי להשתמש בכותרת Origin-Agent-Cluster
, צריך להגדיר את שרת האינטרנט כך שישלח את קוד ה-HTTP הבא
כותרת תגובה:
Origin-Agent-Cluster: ?1
הערך של ?1
הוא המבנה
תחביר כותרת של true
בוליאני
עם ערך מסוים.
חשוב לשלוח את הכותרת הזו בכל התגובות מהמקור, לא רק בדפים מסוימים. אחרת, יכול להיות שיוצגו לך תוצאות לא עקביות כשהדפדפן "זוכר". רואה קידוד לפי מקור ולכן הוא מקושר למפתחות מקור גם בדפים שלא מבקשים אותו. או להיפך: אם הדף הראשון למשתמש מבקר אין כותרת, הדפדפן יזכור שהמקור לא רוצה עם קידוד לפי מקור, ותתעלם מהכותרת בדפים הבאים.
הסיבה ל'זיכרון' הזה היא לשמור על עקביות בהזנת המקור. אם דפים מסוימים
המקור היה עם קידוד לפי מקור, בעוד שאחרים לא כן, היו יכולים להיות לכם שני דפים מאותו מקור
באשכולות סוכנים שונים, ולכן לא יכולנו לדבר זה עם זה. זה יהיה
מאוד מוזר, גם למפתחי אתרים וגם הפנימית של הדפדפן. כלומר, המפרט
לערך Origin-Agent-Cluster
, המערכת מתעלמת מהכותרת אם היא לא תואמת לזו הקודמת
מופיע עבור מקור נתון. ב-Chrome, פעולה כזו תגרום להצגת אזהרה במסוף.
העקביות הזו בהיקף של קבוצת הקשר של גלישה, שהיא קבוצה של כרטיסיות, חלונות או
מסגרות iframe שיכולות להגיע זה לזה באמצעות מנגנונים כמו window.opener
, frames[0]
או
window.parent
. המשמעות היא שלאחר שהוסדרה הגדרת קידוד לפי אתר או מקור של מקור (על ידי
של הדפדפן רואה או לא רואה את הכותרת), כדי לשנות אותו צריך לפתוח כותרת חדשה לגמרי
לא מחוברת לתוכן הישן בשום צורה.
הפרטים האלה יכולים להיות חשובים לבדיקת הכותרת של Origin-Agent-Cluster
. בפעם הראשונה שמוסיפים אותו
באתר שלך, רק טעינה מחדש של הדף לא תעבוד. צריך לסגור את הכרטיסייה ולפתוח כרטיסייה חדשה
אחת.
כדי לבדוק אם הכותרת Origin-Agent-Cluster
מוחלת, צריך להשתמש ב-JavaScript
נכס window.originAgentCluster
. הערך יהיה true
במקרים שבהם הכותרת (או כותרת אחרת)
מנגנונים כמו בידוד בין מקורות) גרמו ליצירת קידוד לפי מקור; false
מתי הוא לא עשה זאת; וגם undefined
בדפדפנים שלא מטמיעים את הכותרת Origin-Agent-Cluster
.
רישום הנתונים האלה בפלטפורמה לניתוח הנתונים יכול לספק בדיקה חשובה שהגדרתם
השרת שלך בצורה הנכונה.
לבסוף, חשוב לזכור שהכותרת Origin-Agent-Cluster
תפעל רק במצב מאובטח
הקשרים, כלומר ב-HTTPS
או ב-http://localhost
. דפי HTTP שאינם מקומיים מארח לא תומכים בסוכן עם קידוד לפי מקור
אשכולות.
קידוד מקור הוא לא אמצעי אבטחה
למרות שהשימוש באשכול סוכנים המשויכים למקור בידוד את המקור מגישה סינכרונית
בדפים ממקורות שונים באותו אתר, הוא לא נותן הגנה
כותרות שקשורות לאבטחה, כמו
Cross-Origin-Resource-Policy
וגם
Cross-Origin-Opener-Policy
.
באופן ספציפי, היא לא מספקת הגנה אמינה מפני מתקפות בערוץ צדדי כמו
Spectre.
זה אולי קצת מפתיע, כי קידוד לפי מקור יכול לגרום לפעמים למקור לקבל קוד נפרד.
ותהליכים נפרדים הם הגנה חשובה מפני התקפות ערוץ צדדי. אבל חשוב לזכור
שהכותרת Origin-Agent-Cluster
היא רק רמז בנושא הזה. הדפדפן לא מכיל את
חובה לתת למקור תהליך נפרד, ויכול להיות שהוא לא עושה זאת מסיבות שונות:
יכול להיות שהדפדפן לא יטמיע את הטכנולוגיה לביצוע הפעולה הזו. לדוגמה, כרגע Safari ו-Firefox יכולים להוסיף כרטיסיות נפרדות לתהליכים משלהם, אבל עדיין לא לעשות זאת עבור iframes.
הדפדפן עשוי להחליט שלא כדאי להשקיע את התקורה של תהליך נפרד. לדוגמה, ב- במכשירי Android עם נפח זיכרון נמוך או ב-Android WebView, דפדפן Chrome משתמש בכמה שפחות תהליכים.
יכול להיות שהדפדפן ירצה לכבד את הבקשה שצוינה בכותרת
Origin-Agent-Cluster
, אבל היא יכולה לעשות זאת באמצעות טכנולוגיית בידוד שונה מזו של תהליכים. לדוגמה, Chrome הוא מה חדש באמצעות שרשורים במקום תהליכים לבידוד כזה של ביצועים.יכול להיות שהמשתמש, או הקוד שפועל באתר אחר, כבר ניווט לדף עם קידוד לאתר במקור, וכתוצאה מכך מבטיחים העקביות אפשר להתעלם מהכותרת
Origin-Agent-Cluster
.
לכן, חשוב לא להתייחס לאשכולות סוכנים המשויכים למקור כתכונת אבטחה. במקום זאת, זו דרך לעזור לדפדפן לתעדף את הקצאת המשאבים, כי היא מרמזת של מקורות המידע שלכם יפיקו תועלת ממשאבים ייעודיים (ואתם מוכנים לוותר על חלקים מסוימים . בתמורה לכך).
משוב
הצוות של Chrome ישמח לשמוע ממך אם את/ה משתמש/ת בOrigin-Agent-Cluster
או שוקלים להשתמש בו
הכותרת. העניין הציבורי והתמיכה שלך עוזרים לנו לתת עדיפות לתכונות ולהציג
לספקי דפדפנים כמה הם חשובים. ציוץ אל @ChromiumDev ואל
רוצה לספר ל-Chrome DevRel על המחשבות ועל החוויות שלך?
אם יש לך שאלות נוספות לגבי המפרט או פרטים על אופן הפעולה של התכונה, תוכל
מציגים בעיה במאגר סטנדרטי של HTML ב-GitHub. ואם
אם תיתקל בבעיות ביישום של Chrome, תוכל לדווח על באג בכתובת
new.crbug.com
כאשר שדה הרכיבים מוגדר ל-Internals>Sandbox>SiteIsolation
.
מידע נוסף
כדי לקבל מידע נוסף על אשכולות סוכנים המשויכים למקור, אפשר להתעמק בפרטים בקישורים הבאים: