מהו צמצום של סוכן משתמש?

הפחתת User-Agent (UA) מצמצמת את הפרטים המזהים שמשותפים במחרוזת של סוכן המשתמש, וניתן לשמש ליצירה פסיבית של טביעת אצבע דיגיטלית. עכשיו, אחרי שהשינויים האלה הושקו בזמינות לכלל המשתמשים, לכל בקשות המשאבים יש כותרת User-Agent מצומצמת. כתוצאה מכך, ערכי ההחזרה מממשקי Navigator מסוימים מצטמצמים, כולל: navigator.userAgent, navigator.appVersion ו-navigator.platform.

מפתחי אתרים צריכים לבדוק את קוד האתר שלהם כדי לוודא שהם כוללים את המחרוזת של סוכן המשתמש. אם האתר שלכם מסתמך על ניתוח המחרוזת של סוכן המשתמש על מנת לקרוא את דגם המכשיר, גרסת הפלטפורמה או גרסת הדפדפן המלאה, תצטרכו להטמיע את ה-User-Agent Client Hints API.

User-Agent Client Hints (UA-CH)

רמזים על הלקוח (Client Hints) לגבי סוכן המשתמש מאפשרים גישה לכל הנתונים של סוכן המשתמש, אבל רק כשהשרתים מצהירים באופן פעיל על צורך מפורש בקטעים ספציפיים של נתונים.

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

למה אנחנו צריכים לצמצם את מספר UA ו-UA-CH?

בעבר, המחרוזת של סוכן המשתמש הייתה מעבירה מחרוזת גדולה של נתונים לגבי הדפדפן, מערכת ההפעלה והגרסה של המשתמש, לכל בקשת HTTP. זה היה בעייתי משתי סיבות:

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

התכונות המצומצמות של UA ו-UA-CH משפרות את פרטיות המשתמשים על ידי שיתוף מידע בסיסי בלבד כברירת מחדל.

סוכן המשתמש המצומצם כולל את מותג הדפדפן וגרסה משמעותית, המקור שממנו נשלחה הבקשה (מחשב או נייד) ואת הפלטפורמה. על מנת לגשת לנתונים נוספים, User-Agent Client Hints מאפשר לך לבקש מידע ספציפי על המכשיר או התנאים של המשתמש.

עם הזמן, המחרוזת User-Agent הלכה והתארכה עוד ועוד, וכתוצאה מכך התבצע ניתוח מחרוזות עם נטייה לשגיאות. UA-CH מספק נתונים מובְנים ואמינים שקל יותר לפרש. קוד קיים שמנתח את המחרוזת של UA לא אמור להיקטע (אבל הוא יחזיר פחות נתונים), ותצטרכו לעבור ל-UA-CH אם באתר שלכם נדרש מידע ספציפי על הלקוח.

איך פועל השיתוף המצומצם של UA ושל UA-CH?

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

משתמש פותח את הדפדפן ומזין example.com בסרגל הכתובות:

  1. הדפדפן שולח בקשה לטעינת דף האינטרנט.

    1. הדפדפן כולל את הכותרת User-Agent עם המחרוזת המצומצמת של סוכן המשתמש. לדוגמה: User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.0.0 Mobile Safari/537.36
    2. הדפדפן כולל את אותו המידע בכותרות ברירת המחדל של User-Agent Hint. למשל:

      Sec-CH-UA: "Chrome"; v="98"
      Sec-CH-UA-Mobile: ?1
      Sec-CH-UA-Platform: "Android"
      
  2. השרת יכול לבקש מהדפדפן לשלוח רמזים נוספים ללקוח, כמו דגם המכשיר, עם כותרת התגובה Accept-CH. לדוגמה: Accept-CH: Sec-CH-UA, Sec-CH-UA-Mobile, Sec-CH-UA-Platform, Sec-CH-UA-Model

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

    Sec-CH-UA: "Chrome"; v="93"
    Sec-CH-UA-Mobile: ?1
    Sec-CH-UA-Platform: "Android"
    Sec-CH-UA-Model: "Pixel 2"
    

רמזים קריטיים ללקוח

אם אתם צריכים קבוצה ספציפית של רמזים ללקוח בבקשה הראשונית, אפשר להשתמש בכותרת התגובה Critical-CH. ערכי Critical-CH חייבים להיות קבוצת משנה של הערכים המבוקשים על ידי Accept-CH.

לדוגמה, הבקשה הראשונית יכולה לכלול בקשה עבור Device-Memory ו-Viewport-Width, שבהן Device-Memory נחשב כקריטי.

GET / HTTP/1.1
Host: example.com

HTTP/1.1 200 OK
Content-Type: text/html
Accept-CH: Device-Memory, Viewport-Width
Vary: Device-Memory, Viewport-Width
Critical-CH: Device-Memory

אם הדפדפן דורש רמז קריטי (Critical-CH) כדי לעבד את דף האינטרנט באופן תקין, השרת יכול לבקש את המידע הנוסף הזה באמצעות הכותרת Accept-CH. לאחר מכן, הדפדפן יכול לשלוח בקשה חדשה לדף, כולל הרמז הקריטי.

לסיכום, Accept-CH מבקש את כל הערכים הרצויים לדף, בעוד ש-Critical-CH מבקש רק את קבוצת המשנה של הערכים שצריך לטעון כדי לטעון את הדף כראוי. מידע נוסף זמין במפרט Client Hints Reliability.

זיהוי מכשירי טאבלטים באמצעות ממשק ה-API של UA-CH

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

עם זאת, המידע שהדפדפן מספק למחרוזת ה-User-Agent וגם לרמזים של סוכן המשתמש מגיע מאותו מקור, ולכן אותן צורות לוגיות אמורות לפעול.

לדוגמה, אם בודקים את הדפוס הזה במחרוזת של UA:

  • קו ביטול הנעילה של הטלפון: 'Android' + 'Chrome/[.0-9]* Mobile'
  • תבנית הטאבלט: 'Android' + 'Chrome/[.0-9]* (?!Mobile)'

אפשר לבדוק את ממשק הכותרות התואם של ברירת המחדל של UA-CH:

  • קו ביטול הנעילה של הטלפון: Sec-CH-UA-Platform: "Android", Sec-CH-UA-Mobile: ?1
  • תבנית הטאבלט: Sec-CH-UA-Platform: "Android", Sec-CH-UA-Mobile: ?0

או בממשק ה-JavaScript המקביל:

  • קו ביטול הנעילה של הטלפון: navigator.userAgentData.platform === 'Android' && navigator.userAgentData.mobile === true
  • תבנית הטאבלט: navigator.userAgentData.platform === 'Android' && navigator.userAgentData.mobile === false

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

איך משתמשים ב-UA מצומצם ובודקים אותו?

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

אחרי העדכון ל-UA-CH API, עליכם לבדוק שאתם מקבלים את הנתונים שאתם מצפים לקבל מ-User-Agent. יש שלוש דרכים לבדוק, שכל אחת מהן עולה במורכבות.

המשמעות של זמינות מותאמת לצמצום של סוכן המשתמש היא שמחרוזת UA המצומצמת במלואה נשלחת לכל מכשירי Chrome. הצמצום התחיל בהשקה מצומצמת של Chrome ברבעון השני של 2022.

בדיקה מקומית של מחרוזות מותאמות אישית

אם רוצים לבדוק את האתר באמצעות מחרוזות של סוכני משתמש בהתאמה אישית כדי לדמות מכשירים שונים, מפעילים את Chrome עם הדגל --user-agent="Custom string here" של שורת הפקודה. למידע נוסף על דגלים בשורת הפקודה

לחלופין, אפשר להשתמש באמולטור המכשיר בכלי הפיתוח ל-Chrome.

משנים את המחרוזת בקוד של האתר

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

תמיכה ברמזים ללקוח וברמזים קריטיים

יש שלושה רמזים ללקוחות שמוגדרים כברירת מחדל שמוחזרים לשרת, כולל שם הדפדפן והגרסה הראשית, ערך בוליאני שמציין אם הדפדפן פועל במכשיר נייד ושם מערכת ההפעלה. הן נשלחות לאחר לחיצת היד של Transport Layer Security Protocol (TLS). הם כבר זמינים ונתמכים בדפדפן שלכם.

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

אופטימיזציה של רמזים קריטיים

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

תרשים רצף של רמזים ללקוח עם רמזים קריטיים.
כאשר השרת מבקש רמז קריטי, הלקוח ינסה לשלוח שוב את הבקשה הראשונה לדף האינטרנט עם הרמז הקריטי. בדוגמה הזו, הרמז עבור Sec-CH-UA-Model נדרש פעמיים: פעם אחת כרמז ללקוח עם Accept-CH ושוב כרמז קריטי עם Critical-CH.

כדי לבצע אופטימיזציה לרמזים הקריטיים (הכותרת Critical-CH), צריך ליירט את לחיצת היד הזו ולספק מודל לרמזים ללקוח. השלבים האלה עשויים להיות מורכבים ונדרש ידע מתקדם.

פריימים ACCEPT_CH HTTP/2 ו-HTTP/3, בשילוב עם תוסף TLS ALPS, הם אופטימיזציה ברמת החיבור כדי לספק את ההעדפות של ה-Client Hint בשרת בזמן לבקשת ה-HTTP הראשונה. ההגדרות האלה דורשות הגדרות מורכבות, ומומלץ להשתמש בהן רק למידע קריטי באמת.

BoringSSL (מזלג של OpenSSL) עוזר לעבוד עם התכונות הניסיוניות של Google ב-Chromium. בשלב זה, ALPS מוטמעת רק ב-BoringSSL.

אם אתם צריכים להשתמש ברמזים קריטיים, עיינו במדריך שלנו בנושא אמינות ואופטימיזציה של רמזים קריטיים.

שאלות נפוצות

למשך כמה זמן יישלחו רמזים שצוינו בכותרת Accept-CH?

רמזים שצוינו בכותרת Accept-CH יישלחו במהלך הסשן בדפדפן או עד שתצוין קבוצה אחרת של רמזים.

האם UA-CH פועל עם HTTP/2 ועם HTTP/3?

UA-CH פועל גם עם חיבורי HTTP/2 וגם עם חיבורי HTTP/3.

האם תת-דומיינים (ו-CNAME) מחייבים דף ברמה העליונה Permissions-Policy כדי לגשת ל-UA-CH באנטרופיה גבוהה?

UA-CH עם אנטרופיה גבוהה בכותרות של בקשות מוגבל בבקשות ממקורות שונים, בלי קשר לאופן שבו המקור מוגדר בצד ה-DNS. יש לטפל בהענקת הגישה דרך Permissions-Policy לכל משאב משנה ממקורות שונים, או להשיג אותן באמצעות JavaScript שמופעל בהקשר ממקורות שונים.

איך הפחתת סוכן המשתמש משפיעה על זיהוי הבוטים?

השינוי שמתרחש במחרוזת של סוכן המשתמש ב-Chrome לא משפיע ישירות על המחרוזת של סוכן המשתמש שהבוט בוחר לשלוח.

הבוטים עשויים לבחור לעדכן את המחרוזות שלהם כך שישקפו את כמות המידע המצומצמת ש-Chrome שולח, אבל זוהי הבחירה שלהם לגבי הטמעה בלבד. Chrome עדיין שולח את אותו פורמט של סוכן משתמש, ובוטים שמוסיפים את המזהה שלהם בסוף מחרוזת User-Agent של Chrome יכולים להמשיך לעשות זאת.

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

יצירת מעורבות ושיתוף משוב

מידע נוסף