התכונה Accept-Language Reduction נועדה לצמצם את מספר החשיפות הפסיבית של טביעת אצבע דיגיטלית (fingerprinting) על ידי צמצום העדפות השפה של המשתמש בכותרת Accept-Language
ושליחה רק של השפה המועדפת על המשתמש (רק שפה אחת).
החל מגרסת הבטא של Chrome 109, נפתח את גרסת המקור של 'הפחתת שפה', שמאפשרת לאתרים לבחור לקבל את הכותרת המצומצמת Accept-Language
. כך אתרים יוכלו לגלות ולתקן בעיות לפני שה-Accept-Language
המופחת יהפוך להתנהגות ברירת המחדל ב-Chrome בגרסה עתידית. כדי לבדוק את התכונה לפני השקת הגרסה היציבה של Chrome, חשוב להצטרף ולבדוק אותה לפני תאריך ההשקה של גרסה 109 של Chrome (שמתוכננת כרגע ל-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 משותפת בכל בקשת HTTP ונחשפה ב-JavaScript לכל המשאבים שהדפדפן טוען. נכון לעכשיו, הוא מכיל את כל השפות המועדפות על המשתמש.
למה האפשרות 'אישור שפה' מצטמצמת?
המטרה של הפחתת השפה בהסכמה היא לצמצם את השימוש הפסיבית ביצירה של טביעת אצבע דיגיטלית ב-Chrome.
נכון לעכשיו, הכותרת Accept-Language
משותפת כברירת מחדל בכל בקשת HTTP, ונחשפה ב-JavaScript לכל המשאבים שהדפדפן טוען. היא כוללת את כל העדפות השפה של המשתמש. במקום שהדפדפן ישלח את הרשימה המלאה של השפות שהמשתמש הגדיר במקרה שאתרים רוצים לספק תוכן בכמה שפות, אנחנו מוסיפים דרך חדשה לאתרים לציין תוכן בכמה שפות, והדפדפן יהיה אחראי לנהל את המשא ומתן לגבי השפה ולהציג את השפה המועדפת.
סיבה נוספת לכך היא שאתרים רבים לא משתמשים בכותרות Accept-Language
בכלל לניהול משא ומתן על שפה (לדוגמה, מחקר אחד מצביע על כך שרק 7.2% מ-10,000 האתרים המובילים משתמשים ב-Accept-Language
). המצב הפרטי ב-Chrome כבר הפחית את הערך Accept-Language
ל-1.
מה המשמעות מבחינת מפתחי אתרים?
אתרים שמסתמכים על Accept-Language
לביצוע משא ומתן בשפה צריכים להתכונן לצמצום של Accept-Language
ולשקול להשתתף בגרסת המקור לניסיון. ערכי Accept-Language
המצומצמים יופיעו במיקומים הבאים:
- הכותרת של בקשת ה-HTTP
Accept-Language
. - רכיב ה-JavaScript של
navigator.languages
.
הדפדפן יקבל אחריות על המשא ומתן לגבי השפה כדי לבחור את השפה המועדפת על המשתמש לשליחה לאתרים. כדי לעשות זאת, אתרים צריכים להוסיף שתי כותרות Variants
(כותרת חדשה מציינת אתרים שתומכים בשפות) Accept-Language
ו-Content-Language
בכותרת התגובה (ראו דוגמה מפורטת בהמשך).
נכון לעכשיו, תוכניות Accept-Language
המצומצמות לא כוללות את iOS ו-WebView, והפלטפורמות האלה ימשיכו לקבל את הרשימה המלאה של Accept-Language
למשתמשים.
התמיכה בפלטפורמות האלה מתוכננת למועד מאוחר יותר.
גרסת מקור לניסיון של הפחתת שפות
בגרסת המקור לניסיון, האתר המשתתף צריך לספק בתגובה אסימון שמנחה את הדפדפן להפעיל את תקופת הניסיון שצוינה. עם זאת, המשמעות היא שבבקשה הראשונית של הדפדפן לאתר אין דרך לדעת אם האתר משתתף בגרסת מקור לניסיון. כלומר, הבקשה הראשונית בסשן לא תשלח את הערך המופחת Accept-Language header
.
בקשות למשאבי משנה בדף הזה, גם מאותו מקור וגם ממקורות צולבים, יקבלו את הכותרת Accept-Language
המוקטנת. הניווטים הבאים מאותו מקור יקבלו גם את הכותרת המצומצמת Accept-Language
. ניווטים ממקורות שונים יחזרו לשלוח את הכותרת המלאה, ואילו הבקשות ממקורות שונים בתוך הדף (כמו בקשות iframe של צד שלישי) עדיין ישלחו את הכותרת המוקטנת של Accept-Language
אם לבקשת המסגרת ברמה העליונה יש אסימון מקור חוקי לניסיון.
האפשרות הזו דומה לגרסת המקור לניסיון של הפחתת סוכן המשתמש, ואם תרצו לקבל מידע נוסף על ההטמעה הפנימית של Chromium, תוכלו לקרוא מידע נוסף בהטמעה של כותרת ה-HTTP מסוג Accept-Language.
השתתפות בגרסת המקור לניסיון של הפחתת שפות
אפשר לקרוא הנחיות נוספות במאמר תחילת העבודה עם גרסאות המקור של Chrome, אבל השלבים החיוניים מפורטים בהמשך.
שלב 1
כדי להירשם לגרסת המקור לניסיון ולקבל אסימון לדומיינים שלכם, היכנסו לדף ניסיון לצמצום שפות.
שלב 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 של צמצום השפה.
הדגמה (דמו)
להדגמה של אתר בכמה שפות שהסכים לגרסת המקור לניסיון (יחד עם קוד המקור), ראו 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
האתר יודע שהמשתמש מעדיף תוכן באנגלית על סמך השפה המקובלת בו. כותרות התגובות עשויות לכלול:
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 של המשתמש. כדי להפסיק להשתתף בתוכנית:
- מסירים את הכותרת
Origin-Trial
של תקופת הניסיון Accept-Language Reduction מתגובת ה-HTTP. - [אופציונלי] אם אתם לא רוצים לשלוח את הכותרת הזו, תוכלו להסיר את הכותרת
Variants
שנוספה להבעת הסכמה לשימוש בגרסת המקור לניסיון של המקור בתגובת ה-HTTP. כדי לעשות זאת, אפשר גם להשתמש ב-Variants
עם ערך ריק. - [אופציונלי] אם אתם לא רוצים לשלוח את הכותרת הזו, צריך להסיר את הכותרת
Content-Language
שמתווספת להצטרפות לגרסת המקור לניסיון בתגובת ה-HTTP.
משך גרסת המקור לניסיון
גרסת המקור לניסיון של Accept-Language Reduction תפעל למשך שישה חודשים לפחות, בסך הכול שש אבני דרך ב-Chrome. גרסת המקור לניסיון תופיע בגרסה M109 ותסתיים בגרסה M114 (זו הגרסה האחרונה של Chrome שגרסת הניסיון זמינה בה). בשלב הזה, Chrome יבדוק את המשוב מגרסת המקור לפני שימשיך לשלוח את המחרוזת המצומצמת של Accept-Language באופן הדרגתי: קודם צריך להקטין את כותרת ה-HTTP של Accept-Language, ואז להקטין את ממשק ה-JS. אם אתר זקוק לזמן נוסף כדי לבדוק, הוא יכול להצטרף לגרסת ניסיון מקור נוספת להוצאה משימוש, וכך תהיה לו גישה למחרוזת Accept-Language המלאה למשך שישה חודשים נוספים לפחות. כשהיא תהיה מוכנה, נפרסם פרטים נוספים על תקופת הניסיון להוצאה משימוש.
מתן משוב
שלחו בעיות או משובים למאגר GitHub של צמצום השפה.