הפעם הראשונה שהייתי צריך להבין מחרוזת User-Agent בכמויות גדולות הייתה במהלך פרויקט SEO wpadminify.com, בוהה ביומן גישה לשרת מנסה להבין כמה מהתנועה היו אנשים אמיתיים וכמה היו סורקים. הייתה לי עמודה של מחרוזות שהכל התחיל איתה Mozilla/5.0, כולם הזכירו את ספארי, וחצי מהם שיקרו על היותם דפדפן אחד בעודם באמת אחרים. לקרוא אותם בעין היה חסר סיכוי. זו העבודה שמנתח User-Agent עושה, ואחרי שעשיתי את זה בדרך הקשה יותר מדי פעמים בניתי אחד Toolz.dev. זה המדריך אליו, ולכותרת המבולגנת המפתיעה מאחוריו.
TL;DR: הכליז מנתח סוכן משתמש לוקח מחרוזת User-Agent ומפצל אותה לדפדפן, מנוע עיבוד, מערכת הפעלה, סוג מכשיר וארכיטקטורת CPU.זה מחיל את סדר הזיהוי שהכותרת ' המוזרויות דורשות, כך ש-Edge לא נקרא בצורה שגויה מכיוון ש-Chrome ו-Safari הנייד נקראים מאסימון הגרסה האמיתית שלו. זה גם מסמן בוטים ידועים. הכל פועל בצד הלקוח: ללא העלאה, ללא הרשמה, בטוח עבור שורות יומן אמיתיות.
מהי מחרוזת User-Agent?
מחרוזת User-Agent היא הערך של User-Agent כותרת בקשה שדפדפן או לקוח HTTP שולחים כמעט עם כל בקשה הכותרת מוגדרת ב RFC 9110, מפרט ה-HTTP Semantics, המתאר אותו כרצף של מזהי מוצר והערות המאפשרים לשרת לזהות את התוכנה המבקשת. בפועל הוא נותן שמות לדפדפן, לגרסתו, למנוע העיבוד, למערכת ההפעלה ולעיתים קרובות למכשיר.
הכוונה הייתה סבירה: תן לשרתים דרך לדעת מה מתחבר כדי שיוכלו להתאים תגובות או לאסוף נתונים סטטיסטיים המציאות היא שהמחרוזת הפכה לאחד החלקים הפחות אמינים של נתונים מדווחים עצמיים ברשת, לא בגלל שהיא זדונית אלא בגלל ששני עשורים של פריצות לתאימות שיבצו אסימון על אסימון עד שהקריאה הברורה היא בדרך כלל שגויה.
הנה מחרוזת Chrome מודרנית ב-Windows:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36
זה טוען שהוא מוזילה, מזכיר את AppleWebKit, ומסתיים במילה Safari.זה לא אחד מהדברים האלה; זה Chrome. כל אסימון לפני Chrome/126 הוא משקעים היסטוריים מנתח קיים בדיוק בגלל שאי אפשר לסמוך על האסימונים שנראים הכי סמכותיים.
מדוע ניתוח User-Agent כל כך נוטה לשגיאות?
הכותרת גדלה על ידי חיקוי במלחמות הדפדפנים המוקדמות שרתים בדקו את User-Agent כדי להחליט איזו גרסה של דף לשלוח, והם בדקו בצורה מגושמת, לרוב עם התאמת תת-מחרוזת פשוטה דפדפן חדש שרצה לקבל את הדף הטוב והמודרני היה צריך להכיל את האסימון שהשרת חיפש, אז כל דפדפן העתיק את הזוכה הקודם נטסקייפ קראה לעצמה Mozilla, אז Internet Explorer טען שהוא תואם Mozilla כאשר דפדפני WebKit הגיעו הם נשאו את האסימונים של Mozilla ו-KHTML Chrome התפצל מ-WebKit ושמר גם על AppleWebKit וגם על Safari כך ששרתים מרחרחים של WebKit יתייחסו אליו היטב התוצאה היא שמחרוזת בודדת יכולה להכיל בכנות את השמות של ארבע שושלות דפדפנים שונות.
זה יוצר מלכודות בטון לכל מי שקורא את המחרוזת:
- אדג' ואופרה מכילים שניהם
Chrome. Microsoft Edge מצרףEdg/126.0.0.0ואופרה מצרףOPR/, אבל שניהם גם נושאים את המלאChrome/126אסימון כי הם מבוססי Chromium.Test for Chrome ראשון ואתה תתייג כל משתמש Edge ו Opera כ - Chrome. - ספארי מסתיר את הגרסה האמיתית שלו. בשולחן העבודה וב-iOS, Safari מדווחת על הגרסה הפונה למשתמש שלה ב-a
Version/17.5אסימון, בעוד הSafari/604.1אסימון קרוב לסוף הוא מספר הבנייה של WebKit, לא גרסת הדפדפן. לקרואSafari/כגרסה ואתה מקבל מספר חסר משמעות. - Chrome ב-iOS אינו מנוע Chrome's. אפל דורשת מכל דפדפני iOS להשתמש ב-WebKit, כך ש-Chrome באייפון מדווח
CriOSומריץ WebKit, לא Blink. Firefox ב-iOS הואFxiOS, גם WebKit. - Windows 11 לא קיים במחרוזת. מיקרוסופט מעולם לא חבטה באסימון ליבת NT, כך שגם Windows 10 וגם Windows 11 מדווחות
Windows NT 10.0. המחרוזת לא יכולה להבדיל ביניהם בכלל.
מנתח הוא ערימה קטנה של חוקים מסודרים שיודעים על המלכודות האלה. זה באמת כל מה שזה, אבל ביצוע ההזמנה נכון זה כל המשחק.
כיצד פועל מנתח סוכן המשתמש של Toolz?
ה מנתח מריץ רצף של בדיקות שהסדר שלהם מקודד את המלכודות למעלה.It מחפש את הדפדפנים שמטמיעים דפדפן אחר's token first.Edge before Chrome, Opera before Chrome, Samsung Internet and UC Browser before Chrome, so the loqued Chrome אסימון אף פעם לא מנצח במקרה. זה קורא ספארי ממנו Version/ אסימון ולא שלו Safari/ אסימון בנייה. זה מזהה את גרסאות iOS CriOS ו FxiOS כ-chrome ו-Firefox בהתאמה תוך דיווח נכון על המנוע שלהם כ-WebKit.
עבור מערכת ההפעלה היא ממפה את מספר הליבה של Windows NT לשם השיווק, אז Windows NT 6.1 הופך ל-Windows 7 ו Windows NT 10.0 הופך ל-Windows 10 או 11, נאמר בכנות כזוג מכיוון שהמחרוזת באמת לא יכולה להבחין ביניהם. זה משחזר את הצורה המקווקו של גרסאות iOS ו-macOS, שהכותרת כותבת עם קווים תחתונים כמו 17_5, והוא מזהה את אנדרואיד, Chrome OS ולינוקס.
עבור המכשיר הוא מסווג את הבקשה כשולחן עבודה, נייד, טאבלט או בוט. כלל הטאבלט הוא הכלל: אייפד הוא טאבלט, מכשיר אנדרואיד ללא Mobile אסימון הוא טאבלט, וכל דבר תואם Mobile, iPhone, או Windows Phone הוא טלפון. כאשר המחרוזת חושפת דגם מכשיר, כגון מחרוזת בנייה של אנדרואיד או שם מוצר של אפל, המנתח מציג אותו.
זה גם מסמן בוטים זה השדה שאני מגיע אליו לרוב, כי כשאתה קורא יומן גישה השאלה השימושית ביותר היא כמה מהתנועה אוטומטית המנתח תואם לסט רחב של חתימות המכסות סורקי חיפוש, מאחזרי תצוגה מקדימה חברתית ולקוחות שורת פקודה.
מה משתמש-סוכן יכול להגיד לך, ומה לא?
כדאי לדייק לגבי הגבולות, כי התייחסות למחרוזת כעובדה מובילה להחלטות גרועות.
| שאלה | האם UA יכול לענות על זה? | הערות |
|---|---|---|
| איזו משפחת דפדפנים | בדרך כלל כן | עם סדר זיהוי נכון |
| גרסת דפדפן מדויקת | בדרך כלל כן | קפוא יותר ויותר או מופחת |
| שם מערכת הפעלה | בדרך כלל כן | Windows 10 לעומת 11 הוא בלתי אפשרי |
| סוג התקן | בערך | היוריסטית, לא מובטחת |
| דגם מכשיר מדויק | לפעמים | רק כשהמחרוזת כוללת את זה |
| האם הלקוח אמיתי | לא | ניתן לזיוף טריוויאלי |
| גודל מסך או יכולות | לא | השתמש בזיהוי תכונות במקום זאת |
שתי השורות האחרונות חשובות ביותר User-Agent מדווח על עצמו וניתן לשנות אותו בשורת קוד אחת, להגדיר על ידי כל לקוח HTTP, או להקפיא על ידי הדפדפן לפרטיות מגרד יכול להכריז על עצמו כ-Chrome ב-Windows ואין שום דבר במחרוזת לסתור את זה אז התוצאה המנותחת אומרת לך מה הלקוח טוען שהוא, וזה שימושי לסטטיסטיקה וניפוי באגים אבל הוא לא הוכחה לכלום כאשר אתה צריך לדעת מה דפדפן יכול לעשות בפועל, זיהוי תכונה ב-JavaScript במקום להסיק יכולות מהשם זהו אותו עיקרון מאחורי כתיבת קוד חזיתי גמיש שה- ערכת כלים למפתחי אינטרנט roundup חוזר שוב ושוב.
האם מחרוזות User-Agent נעלמות?
לא בדיוק, אבל הם מופחתים בכוונה דפדפני Chromium כבר להקפיא ו לקצץ את המחרוזת מדור קודם במשך כמה שנים, מכסה את רמת הפירוט זה חושף, במיוחד מספרי הגרסה מינוריים וכמה פרטי פלטפורמה ההחלפה היא רמזים ללקוח סוכן משתמש, מנגנון שבו השרת מבקש בדיוק את פיסות המידע של הלקוח שהוא צריך דרכו Sec-CH-UA בקש כותרות ואת navigator.userAgentData JavaScript API, במקום לקבל מחרוזת אחת ארוכה שהוא צריך לנתח. Client Hints הוא גם המקום שבו ההבחנה של Windows 10 לעומת 11 הופכת סוף סוף לזמינה, דרך Sec-CH-UA-Platform-Version.
התוצאה המעשית לשנים הקרובות היא ששניהם קיימים. הקלאסיקה User-Agent header עדיין נשלח על כל בקשה מכל דפדפן ומכל לקוח שאינו דפדפן, והרבה מאוד כלים, ניתוחים והיגיון בצד השרת עדיין קורא את זה. אז ניתוח המחרוזת נשאר הדרך הניידת ביותר לזהות לקוח, גם כשהנתונים העשירים יותר עוברים לרמזים ללקוח. אם אתה בונה משהו חדש ורוצה את גרסת הפלטפורמה במדויק, קרא רמזים ללקוח; אם אתה מנתח יומן קיים או תומך במגוון הרחב ביותר של לקוחות, נתח את המחרוזת.
כיצד אוכל להשתמש במנתח?
הזרימה פשוטה בכוונה הדבק מחרוזת User-Agent בתיבה, או לחץ על אחת מהדוגמאות המובנות כדי לראות מחרוזת מייצגת של שולחן העבודה, הנייד או הבוט כדי לתפוס משלך, פתח את מסוף הדפדפן שלך והקלד navigator.userAgent, לאחר מכן הדבק את התוצאה בזמן שאתה מקליד, הדפדפן, המנוע, מערכת ההפעלה, סוג המכשיר, ארכיטקטורת המעבד ועדכון דגל הבוט בשידור חי, ללא כפתור ללחוץ. כאשר אתה רוצה את התוצאה במקום אחר, העתק אותה כטבלה מופרדת בכרטיסייה שמדביקה בצורה נקייה לגיליון אלקטרוני או לדוח באג.
מכיוון שכל העניין פועל בדפדפן שלך, אתה יכול להדביק קווי יומן גישה גולמיים או מחרוזות מבקרים אמיתיות מבלי שאף אחד מהם יעזוב את המכונה שלך. המודל הזה בצד הלקוח הוא מכוון והוא אותו אחד מאחורי כל כלי באתר, מוסבר ב- כלים מקוונים לפרטיות נתונים מדריך. עבור אישור אתה מאתר באגים לצד בקשה, ה מחולל אישורים בסיסי וה מפענח JWT פעל באותה גישה ללא העלאה.
היכן המנתח מתאים לכלי האינטרנט האחרים
מנתח סוכן המשתמש יושב באשכול קטן של כלי בקשה ותגובה באתר. כאשר אתה בודק את התעבורה לדומיין, ה חיפוש דומיין כלי עונה מי הבעלים ומפעיל אותו. כאשר בקשה נושאת אסימון נושא אתה צריך לבדוק, את מפענח JWT קורא את הטענות מתוך זה. כאשר אתה בונה בקשה מאומתת מלכתחילה, ה מחולל אישורים בסיסי בונה את Authorization כותרת. וכאשר אתה עובד על האופן שבו דף מציג את עצמו בפני סורקים, שקוראים את הדפים שלך תחת סוכני המשתמש שלהם, ה מחולל מטא תגים מעצב את התגים שהם צורכים.
לכל מי שמרכיב סט אישי של אלה, ה כלי פרודוקטיביות למפתחים המדריך מכסה כיצד כלי השירות מבוססי הדפדפן באתר משתלבים ביום עבודה. הנקודה בשמירה עליהם היא שניפוי באגים באינטראקציה של HTTP כרוך רק באחת מהשאלות הללו.
זרימת עבודה מעשית: קריאת יומן תנועה
תן לי לעשות את זה בטון עם המשימה שהתחילה אותי בדרך זו יצאת פרוסה של יומן הגישה שלך ואתה רוצה להבין את זה הגישה הנאיבית היא לגלגל עין את העמודה User-Agent, שזה בדיוק המקום שבו המלכודות נושכות זחל שמזהה את עצמו בנימוס כמו Googlebot זה קל, אבל מגרד ללא ראש המכריז על עצמו כמבנה Chrome רגיל נראה זהה למבקר אמיתי עד שאתה בודק את האותות האחרים.
המנתח עוזר בשתי דרכים ראשית, דגל הבוט תופס את הסורקים הכנים ואת לקוחות האוטומציה הנפוצים באופן מיידי, כך שתוכל להפריד את תעבורת המכונה הברורה מהתנועה האנושית במעבר אחד שנית, התמוטטות הדפדפן ומערכת ההפעלה הנכונה של התעבורה שנותרה אומרת לך משהו אמיתי על הקהל שלך: האם הוא מטה את הנייד, אילו מערכות הפעלה שולטות, האם דפדפן ישן עדיין חשוב מספיק כדי לבדוק מולו. בעבודת WP Adminify, התמוטטות זו שינתה אילו דפדפנים העדפנו לבדיקה ואישרה שחלק ממה שנראה כמו תעבורה אורגנית הוא תצוגה מקדימה וניטור בוטים ולא קוראים ניתוח המיתרים הפך קיר של רעש להחלטה.
המשמעת האחת שיש לשמור היא זו מסעיף הגבולות: התוצאה המנותחת היא טענה, לא הוכחה. מגרד נחוש יחשל מחרוזת משכנעת, ואף מנתח לא יכול לתפוס את זה מהמשתמש-סוכן בלבד. שלב את הניתוח עם דפוסי בקשה, קצב ואותות אחרים כאשר ההימור גבוה. עם זאת, עבור סטטיסטיקה יומיומית וניפוי באגים, ניתוח נכון הוא בדיוק מה שאתה צריך, ולעשות זאת ביד זו הטעות.
מה אומרים לי מנוע העיבוד ושדות המעבד?
שניים מהשדות המנותחים זוכים לתשומת לב פחותה מהדפדפן וממערכת ההפעלה, אך שניהם שימושיים מנוע העיבוד הוא הרכיב שלמעשה הופך HTML ו-CSS לפיקסלים, והוא מנבא טוב יותר כיצד דף מתנהג מאשר שם הדפדפן כרום, אדג', אופרה, אמיצים, סמסונג אינטרנט ורוב האחרים חולקים את מנוע ה-Blink, כך שבאג עיבוד שמופיע באחד מופיע בדרך כלל בכולם; Firefox משתמש ב-Gecko; ו-Safari, יחד עם כל דפדפן ב-iOS, משתמשים ב-WebKit. כאשר אתה בודק באג פריסה, קיבוץ התעבורה שלך לפי מנוע ולא לפי שם הדפדפן אומר לך כמה נתיבי עיבוד ברורים באמת עליך לבדוק, שהם לרוב רק שלושה.
המנתח שואב את המנוע מאסימוני הפלטפורמה ולא מתווית הדפדפן, וזו הסיבה שהוא יכול לדווח על Blink עבור דפדפן Chromium ו-WebKit עבור Safari למרות ששניהם יורדים מאותו אסימון AppleWebKit. זה גם תופס את המנועים הישנים יותר, Trident עבור Internet Explorer ו-EdgeHTML עבור Edge מדור קודם, שעדיין מופיעים ביומנים ארגוניים.
שדה ארכיטקטורת המעבד קורא את אסימוני הפלטפורמה עבור x86_64, Win64, arm64, וקרוביהם, מדווחים אם הלקוח הוא מכונת 64 סיביות, 32 סיביות או ARM. זה השדה לבדוק מתי אתה משרת הורדות ספציפיות לפלטפורמה וצריך לדעת איזה מבנה מבקר יכול להפעיל, וזה אות שקט לכמה מודרני הקהל שלך 's החומרה היא.
שאלות נפוצות
מהי מחרוזת User-Agent? מחרוזת User-Agent היא הערך של כותרת ה-HTTP User-Agent שדפדפן או לקוח שולחים עם כל בקשה זוהי רשימה של אסימוני מוצר הנותנים שם לדפדפן, למנוע העיבוד שלו, למערכת ההפעלה, ולעתים קרובות למכשיר, המוגדר ב-RFC 9110 שרתים קוראים אותו כדי לזהות את התוכנה המתחברת אליהם.
כיצד אוכל למצוא סוכן משתמש משלי? פתח את הדפדפן שלך's developer console והקלד navigator.userAgent, ולאחר מכן הקש Enter.המחרוזת שהוא מדפיס היא בדיוק מה שהדפדפן שלך שולח לשרתים הדבק אותו במנתח סוכן המשתמש כדי לראות את הדפדפן, מערכת ההפעלה והמכשיר שהוא מפענח אליהם.
מדוע Chrome's User-Agent מכיל את המילה Safari? לתאימות לאחור. Chrome חילץ את המנוע שלו מ-Apple's WebKit, ושרתים מוקדמים בדקו את אסימון ה-Safari לפני הגשת דפים מודרניים, אז Chrome שמר אותו כדי להימנע משדרוג לאחור. אותה היסטוריה היא הסיבה שכמעט כל דפדפן עדיין מתחיל את המחרוזת שלו עם Mozilla/5.0.
האם סוכן משתמש יכול לדעת ל-Windows 10 מ-Windows 11? מס 'שניהם מדווחים על Windows NT 10.0 מכיוון שמיקרוסופט מעולם לא הגדילה את אסימון ליבת NT עבור Windows 11, כך שהמחרוזת לבדה לא יכולה להבחין בין השניים הדרך המודרנית להבדיל ביניהם היא User-Agent Client Hints, במיוחד הכותרת Sec-CH-UA-Platform-Version.
האם User-Agent אמין לזיהוי מכשיר? זה רמז שימושי, לא הוכחה ניתן לשנות User-Agents בשורה אחת של קוד, להגדיר על ידי כל לקוח HTTP, מזויף על ידי מגרדים, או מוקפא על ידי הדפדפן לפרטיות התייחס לתוצאה המנותחת כמו מה הלקוח טוען להיות, ולשלב אותו עם אותות אחרים כאשר דיוק חשוב.
כיצד המנתח מזהה בוטים וסורקים? הוא מתאים את המחרוזת לרשימה רחבה של חתימות ידועות, כולל סורקי חיפוש כמו Googlebot ו-Bingbot, מאחזרי תצוגה מקדימה חברתית ולקוחות אוטומציה כמו curl, wget ו-Chrome ללא ראש. כל התאמה מגדירה את דגל הבוט ומסווגת את המכשיר כסורק.
האם זה בטוח להדביק יומן ייצור User-Agents כאן? כן כל הניתוחים מתרחשים בדפדפן שלך עם JavaScript, והמחרוזת לעולם לא נשלחת לאף שרת אתה יכול להדביק קווי יומן גישה גולמיים או סוכני משתמש מבקרים אמיתיים מבלי שהם יעזבו את המכשיר שלך.
האם מחרוזות User-Agent מבוטלות? הכותרת מוקפאת ומצטמצמת, לא מוסרת דפדפני Chromium מכסים כעת את הפרטים במחרוזת הישנה וחושפים נתונים עשירים יותר באמצעות רמזים ללקוח User-Agent במקום זאת המחרוזת הקלאסית עדיין נשלחת על כל בקשה, כך שניתוח זה נשאר הדרך הניידת ביותר לקרוא פרטי לקוח.



