צמצום של Accept-Language הוא ניסיון לצמצם את הפלטפורמות ליצירת טביעות אצבע פסיביות על ידי צמצום העדפות השפה של המשתמש בכותרת Accept-Language
ושליחה של השפה המועדפת ביותר על המשתמש בלבד (רק אחת).
החל מגרסת הבטא של Chrome 109, נפתח את גרסת המקור לניסיון של צמצום Accept-Language, כדי לאפשר לאתרים להביע הסכמה לקבלת הכותרת Accept-Language
המקוצרת. כך האתרים יוכלו לזהות ולתקן בעיות לפני שההתנהגות המוגבלת של Accept-Language
תהפוך לברירת המחדל ב-Chrome בגרסה עתידית. כדי לבדוק את התכונה לפני שהיא תושק לאוכלוסייה יציבה, חשוב להביע הסכמה ולבדוק אותה לפני תאריך ההשקה של Chrome 109 (התאריך המתוכנן הוא 10 בינואר 2023).
בהמשך מפורטות דוגמאות לכותרת Accept-Language
לפני ואחרי ההפחתה.
Accept-Language: en-GB,en;q=0.9,de;q=0.8,fr;q=0.7
Accept-Language: en-GB
בהמשך מופיעה סקירה כללית של תקופת הניסיון למקורות נתונים, וגם מה צפוי לכם. אתם יכולים לשלוח משוב על השינוי הזה או על בעיות שתתקלו בהן במהלך תקופת הניסיון במקור במאגר GitHub של צמצום Accept-Language.
מהו Accept-Language?
המחרוזת Accept-Language משותפת בכל בקשת HTTP וחשופה ב-JavaScript לכל המשאבים שהדפדפן טוען. נכון לעכשיו, הוא מכיל את כל השפות המועדפות על המשתמש.
למה מתבצע צמצום של Accept-Language?
צמצום של Accept-Language הוא מאמץ לצמצם את הפלטפורמות הפסיביות ליצירת טביעות אצבע ב-Chrome.
בשלב זה, הכותרת Accept-Language
משותפת כברירת מחדל בכל בקשת HTTP, וחשופה ב-JavaScript לכל המשאבים שנטענים על ידי הדפדפן. הוא מכיל את כל העדפות השפה של המשתמש. במקום שהדפדפן ישלח את הרשימה המלאה של השפות שהמשתמש הגדיר למקרה שהאתרים ירצו לספק תוכן בכמה שפות, אנחנו משיקים דרך חדשה לאתרים לציין תוכן בכמה שפות, והדפדפן יהיה אחראי לנהל את המשא ומתן על השפה ולהציג את השפה המועדפת.
סיבה נוספת היא שיכול להיות שבאתרים רבים לא נעשה שימוש בכותרות Accept-Language
כלל לצורך משא ומתן על שפה (לדוגמה, במחקר אחד צוין שרק 7.2% מתוך 10,000 האתרים המובילים משתמשים ב-Accept-Language
). מצב פרטי ב-Chrome כבר צמצם את מספר הכותרות Accept-Language
לכותרת אחת.
מה המשמעות מבחינת מפתחי אתרים?
באתרים שמסתמכים על Accept-Language
כדי לנהל משא ומתן על שפה, צריך להתכונן לקבלת Accept-Language
מופחתת ולשקול להשתתף בגרסת הטרום-השקה של המקור. ערכי Accept-Language
המוקטנים יופיעו ב:
- כותרת בקשת ה-HTTP
Accept-Language
. - פונקציית ה-getter של JavaScript
navigator.languages
.
הדפדפן יישא באחריות לניהול המשא ומתן על השפה כדי לבחור את השפה המועדפת על המשתמש לשליחה לאתרים. כדי לעשות זאת, צריך להוסיף לאתר שני כותרות Variants
(כותרת חדשה מציינת אתרים שתומכים בשפות) Accept-Language
ו-Content-Language
בכותרת התגובה (ראו דוגמה מפורטת בהמשך).
תוכניות Accept-Language
עם ההנחה לא כוללות כרגע את iOS ו-WebView, והפלטפורמות האלה ימשיכו לקבל את הרשימה המלאה של Accept-Language
של המשתמשים.
התמיכה בפלטפורמות האלה מתוכננת למועד מאוחר יותר.
גרסת מקור לניסיון של צמצום של Accept-Language
כדי להפעיל גרסת טרום-השקה (origin trial) באתר המשתתף, צריך לספק בתגובה שלו אסימון שמורה לדפדפן להפעיל את גרסת הטרום-השקה שצוינה. עם זאת, המשמעות היא שבבקשה הראשונית של הדפדפן לאתר אין לו דרך לדעת אם האתר משתתף בתוכנית ניסוי למקורות. המשמעות היא שהבקשה הראשונית בסשן לא תשלח את Accept-Language header
המופחת.
בקשות למשאבי משנה בדף הזה, גם מאותו מקור וגם ממקורות שונים, יקבלו את הכותרת המקוצרת Accept-Language
. גם ניווטים נוספים מאותו מקור יקבלו את הכותרת המקוצרת Accept-Language
. ניווטים בין מקורות יחזרו לשליחת הכותרת המלאה, אבל בקשות בין מקורות בתוך הדף (כמו בקשות iframe של צד שלישי) עדיין ישלחו את הכותרת המקוצרת Accept-Language
אם לבקשת המסגרת ברמה העליונה יש אסימון ניסיון תקף למקור.
זה דומה לניסוי ההפחתה של סוכן המשתמש במקור. למידע נוסף על ההטמעה הפנימית ב-Chromium, אפשר לקרוא את המאמר הטמעה של כותרת HTTP מסוג Reduce Accept-Language.
להשתתף בגרסת המקור לניסיון של צמצום Accept-Language
אפשר לקרוא הנחיות נוספות במאמר תחילת השימוש בגרסת המקור לניסיון של Chrome, אבל השלבים החיוניים מפורטים בהמשך.
שלב 1
כדי להירשם לתקופת הניסיון למקור ולקבל אסימון לדומיינים שלכם, תוכלו להיכנס לדף Trial for Accept-Language Reduction.
שלב 2
מעדכנים את כותרות התגובה של HTTP:
- מוסיפים את
Origin-Trial: <ORIGIN TRIAL TOKEN>
לכותרת התגובה של ה-HTTP, כאשר <ORIGIN TRIAL TOKEN
> מכיל את האסימון שקיבלת כשנרשמת לגרסת המקור לניסיון. - מוסיפים את
Content-Language
לכותרת התגובה של ה-HTTP כדי לציין את השפות המיועדות לקהל. - מוסיפים את
Variants
לכותרת התגובה של ה-HTTP כדי לציין את השפות הנתמכות באתר. - [אופציונלי] מוסיפים את
Vary: Accept-Language
לתגובת ה-HTTP כדי ליצור מפתח מטמון לניהול משא ומתן על תוכן. - הגדרת הכותרות האלה תגרום רק לניהול משא ומתן על שפת הדפדפן (הפעלה מחדש פוטנציאלית של הבקשה הראשונית) למקור הנתון. כדי שהאתרים יציגים את ייצוג השפה הנכון למשתמשים, צריך גם לעדכן את האתרים ששולחים את התוכן על סמך הכותרת Accept-Language של המשתמש (ראו דוגמה בהמשך).
שלב 3
טוענים את האתר ב-Chrome M109 Beta (או גרסה מתקדמת יותר) ומתחילים לקבל את המחרוזת המקוצרת של Accept-Language.
אתם יכולים לשלוח בעיות או משוב למאגר GitHub של צמצום Accept-Language.
הדגמה (דמו)
הדגמה של אתר בכמה שפות שהביע הסכמה לתוכנית הניסוי למקורות (יחד עם קוד המקור) זמינה בכתובת https://reduce-accept-language.glitch.me/.
הדגמה של הסכמה לשימוש בתכונה 'הצגת הודעה על הסכמה לשימוש בשפה' בתקופת הניסיון בדומיין (יחד עם קוד המקור) זמינה בכתובת https://reduce-accept-language-ot.glitch.me/.
לדוגמה, example.com
תומך ב-ja
(יפנית) וב-en
(אנגלית). בקשה יכולה להיות:
GET / HTTP/1.1
Host: example.com
Accept-Language: en
האתר יודע שהמשתמש מעדיף תוכן באנגלית על סמך הערך של accept-language שלו. כותרות התגובה עשויות לכלול:
HTTP/1.1 200 OK
Content-Language: en
Variants: Accept-Language=(en ja)
Origin-Token: a-valid-token
אם למשתמש יש העדפה לתוכן בשפה היפנית, הבקשה תהיה:
GET / HTTP/1.1
Host: example.com
Accept-Language: ja
במקרה כזה, האתר מגיב עם כותרות לתוכן ביפנית:
HTTP/1.1 200 OK
Content-Language: ja
Variants: Accept-Language=(en ja)
Origin-Token: a-valid-token
בצד השרת, יכול להיות שהאתר יחפש תמיכה בשפה ספציפית, אבל יחזור לשפת ברירת המחדל אם לא תזוהה תמיכה:
if(accept_language == 'ja') {
res.response('ja_page')
}
else {
res.response('en_page')
}
בדוגמה שלמעלה, example.com
משיב en
או ja
על סמך הערך של Accept-Language
, והערך שמוגדר כברירת מחדל הוא en
אם לא נמצאה התאמה. במקרה כזה, האתר יכול גם לספק הפניות אוטומטיות לדפי השפה המתאימים, /en
או /ja
, על סמך הערך של Accept-Language
. דוגמאות מפורטות בנושא הפניות אוטומטיות מופיעות במסמך ההטמעה.
תמיכה בגרסת מקור לניסיון של צד שלישי
בשלב הזה אנחנו לא תומכים ברישום הדומיינים שלכם כצד שלישי בתקופת הניסיון.
אם אתם מפעילים שירות שמוטמע כמשאב משנה במקורות שונים (כמו הצגת מודעות או ניתוח נתונים), תקבלו את הכותרת המקוצרת Accept-Language
רק אם האתר ברמה העליונה משתתף בגרסת הניסיון של המקור.
אימות שהגרסה לניסיון באתר המקור פועלת
במדריך לפתרון בעיות בגרסת המקור של Chrome מופיעה רשימת משימות מלאה שתעזור לכם לוודא שהאסימון מוגדר בצורה נכונה.
אפשר להגדיר כמה שפות ואת סדר העדיפויות שלהן דרך chrome://settings/languages
או 'הגדרות' → 'שפות'. מומלץ לבחור שפה שהאתר לא תומך בה ולהעביר אותה לראש הרשימה כדי להבטיח שהמשא ומתן החוזר הנוסף יופעל.
הכותרות של התגובה הראשונית שמכילות את אסימון תקופת הניסיון במקור אמורות להיראות כך:

כותרות הבקשות הבאות שמכילות את Accept-Language המקוצר נראות כך:

הפסקת ההשתתפות בתוכנית 'תקופת ניסיון במקור'
בכל שלב במהלך תקופת הניסיון, תוכלו להפסיק את ההשתתפות ולקבל את הרשימה המלאה של Accept-Language של המשתמשים. כדי להפסיק את ההשתתפות:
- מסירים את הכותרת
Origin-Trial
של תקופת הניסיון של צמצום Accept-Language מתשובת ה-HTTP. - [אופציונלי] אם אתם לא רוצים לשלוח את הכותרת
Variants
, שהיא הכותרת שנוספת כדי להביע הסכמה לתקופת הניסיון במקור, תוכלו להסיר אותה מתשובת ה-HTTP. אפשר גם להשתמש ב-Variants
עם ערך ריק כדי להשיג את זה. - [אופציונלי] אם אתם לא רוצים לשלוח את הכותרת
Content-Language
, שהיא הכותרת שמתווספת לתגובת ה-HTTP כדי להביע הסכמה לניסיון המקור, תוכלו להסיר אותה.
משך תקופת הניסיון של גרסת המקור
תקופת הניסיון של גרסת המקור לצמצום של Accept-Language תימשך לפחות שישה חודשים, שתואמים לכ-6 אבני דרך של Chrome. גרסת המקור לניסיון תופיע בגרסה M109 ותסתיים בגרסה M114 (כלומר בגרסה האחרונה של Chrome שבה האפשרות הזו זמינה). בשלב הזה, Chrome יעריך את המשוב מהניסוי במקור לפני שהוא ימשיך לשלוח את המחרוזת המקוצרת של Accept-Language באופן מדורג: קודם יקצר את כותרת ה-HTTP של Accept-Language ואז יקצר את ממשק ה-JS. אם באתר שלכם נדרש זמן נוסף לבדיקה, תוכלו להצטרף לתוכנית הניסיון הבאה להוצאה משימוש של מקור, שתאפשר לכם לגשת למחרוזת המלאה של Accept-Language למשך שישה חודשים נוספים לפחות. נפרסם פרטים נוספים על תקופת הניסיון להוצאה משימוש כשהיא תהיה מוכנה.
מתן משוב
אתם יכולים לשלוח בעיות או משוב למאגר GitHub של צמצום Accept-Language.