هر بار که Chrome به وبسایتی متصل میشود، یک خط کوتاه متن نیز میفرستد که مرورگر، سیستمعامل و دستگاهی را که روی آن اجرا میشود مشخص میکند. به این متن «رشته عامل کاربر» گفته میشود و وبسایتها از آن برای تصمیمگیری درباره نسخهای از صفحه که باید ارائه کنند استفاده میکنند. بااینحال، معرفی Chrome بیشتر به یک بحران هویت شباهت دارد.
Chrome را باز کنید، F12 (یا Ctrl + Shift + I) را فشار دهید، به زبانه Console مرورگر بروید، navigator.userAgent را تایپ کنید و برای مشاهده نتیجه Enter را فشار دهید. در برخی لپتاپها باید بهجای آن Fn + F12 را فشار دهید. در رایانه Windows من، رشته حاصل به این شکل است:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36
نسخه Chrome تغییر خواهد کرد، اما باقی ساختار تقریباً دستنخورده مانده است. ظاهراً Chrome خود را Mozilla معرفی میکند. از AppleWebKit نام میبرد، اضافه میکند که «مانند Gecko» است—موتوری که Firefox را به کار میاندازد—و در پایان نام Safari را میآورد. جایی نزدیک انتهای رشته، تقریباً مانند نکتهای که دیر به ذهن رسیده باشد، سرانجام به Chrome اشاره میکند.
بهطور دقیق، اینها توکنهای سازگاری هستند، نه اظهارات کامل درباره هویت. Chrome واقعاً ادعا نمیکند که چند موتور مرورگر رقیب را همزمان اجرا میکند. بااینحال، هیچیک از این نامها اشتباه تایپی نیستند. هرکدام برای راضی نگهداشتن وبسایتهایی به ارث رسیدهاند که انتظار دیدن آن را داشتند، و حذف هر یک ممکن است باعث شود صفحات رفتار متفاوتی داشته باشند.
برای درک علت وجود این متن متورم، باید به نخستین سالهای وب گرافیکی بازگردید.
Mozilla به نخستین گذرواژه مرورگر در وب تبدیل شد
Mozilla یک شوخی داخلی بود که هرگز پاکسازی نشد

NCSA Mosaic یکی از نخستین مرورگرهای گرافیکی بود که به استفاده گسترده دست یافت و خود را با NCSA_Mosaic/۲.۰ معرفی میکرد. رشته عامل کاربر آن نسبتاً ساده بود، زیرا شناسایی مرورگر هنوز به روشی استاندارد برای تعیین قابلیتهایی تبدیل نشده بود که وبسایتها اجازه دسترسی به آنها را به بازدیدکنندگان میدادند.
سپس Netscape Navigator از راه رسید. نام رمز داخلی پروژه آن Mozilla بود، ترکیبی از «قاتل Mosaic» و «Godzilla»، و عامل کاربر آن با Mozilla/۱.۰ آغاز میشد. Netscape قابلیتهایی را معرفی کرد که Mosaic فاقد آنها بود؛ از جمله قابهای HTML که امکان نمایش چند سند را در یک پنجره مرورگر فراهم میکردند.
Mosaic نمیتوانست آن چیدمانهای مبتنی بر قاب را به شکل موردنظر نمایش دهد؛ بنابراین برخی وبسایتها و اسکریپتهای سمت سرور شروع به بررسی رشته عامل کاربر کردند. بازدیدکنندگانی که نام مرورگرشان با «Mozilla» آغاز میشد، تجربه جدیدتر را دریافت میکردند، درحالیکه دیگران نسخهای سادهتر یا پیامی مبنی بر پشتیبانینشدن مرورگر دریافت میکردند.
این عادت معنای رشته عامل کاربر را تغییر داد. این رشته دیگر صرفاً نرمافزار ارسالکننده درخواست را توصیف نمیکرد، بلکه به گذرواژهای تبدیل شد که مرورگرها باید ارائه میکردند تا وبسایتها قابلیتهای خاصی را برایشان باز کنند.
Internet Explorer تصمیم گرفت صرفاً خود را Netscape معرفی کند
Mozilla/2.0 (compatible; MSIE 3.0)

هنگامی که Internet Explorer پشتیبانی از قابلیتهایی مانند قابها را به دست آورد، با وبسایتهایی مواجه شد که پیشوند Mozilla را نشانهای از توانایی مرورگر برای مدیریت صفحات پیشرفتهترشان میدانستند. مرورگری با شناسهای ناآشنا ممکن بود صفحهای سادهسازیشده دریافت کند یا پیش از آنکه وبسایت قابلیتهای واقعیاش را آزمایش کند، رد شود.
Microsoft از راهحلی صریح اما مؤثر استفاده کرد. Internet Explorer شناسه Mozilla متعلق به Netscape را در ابتدای رشته عامل کاربر خود قرار داد و سپس هویت واقعیاش را داخل پرانتز فاش کرد. Internet Explorer ۳ از رشتهای شبیه به این استفاده میکرد:
Mozilla/2.0 (compatible; MSIE 3.0; Windows 95)
سروری که بررسی سادهای انجام میداد، «Mozilla» را میدید و اجازه عبور مرورگر را صادر میکرد. اسکریپتهای دقیقتر میتوانستند به خواندن ادامه دهند، MSIE را پیدا کنند و Internet Explorer را بهدرستی تشخیص دهند. پیشوند گمراهکننده سازگاری را حفظ میکرد، درحالیکه اطلاعات داخل پرانتز حقیقت را بیان میکرد.
آن سازش به شکلگیری یک قاعده ماندگار در مرورگرها کمک کرد: ابتدا با توکن سازگاری موردانتظار وبسایتها آغاز کنید، سپس اطلاعات واقعی کافی را برای اسکریپتهای دقیقتر بیفزایید. مرورگرهای بعدی رشتههای هویتی هرچه شلوغتری را به کار گرفتند، زیرا معرفی دقیق خودشان ممکن بود بررسیهای سازگاری منسوخ را فعال کند و وبسایتها را از کار بیندازد.
این شکنندگی دههها بعد نیز آشکار بود؛ زمانی که Chrome ۱۰۰ و Firefox ۱۰۰ ممکن بود وبسایتهایی را از کار بیندازند که تجزیهگرهایشان فرض میکردند نسخه مرورگر همیشه شامل دو رقم خواهد بود.
Safari نشان Mozilla را حفظ کرد و نام Gecko را وام گرفت
KHTML با برچسب نام Gecko

پروژه Mozilla بعدها پلتفرم مرورگر خود را بر پایه Gecko ساخت؛ یکی از معدود موتورهای مرورگری که تحت کنترل Google یا Apple نیست. Firefox واقعاً از Gecko استفاده میکند، اما رشته user-agent آن همچنان با Mozilla/۵.۰ آغاز میشود، زیرا این پیشوند به نشانی عمومی برای سازگاری تبدیل شده بود. توسعهدهندگان همچنین از وجود Gecko بهعنوان میانبری برای تشخیص این موضوع استفاده کردند که آیا میتوان صفحات نوشتهشده برای موتورهای مدرن و استانداردمحور را به یک مرورگر ارائه کرد یا خیر.
Safari هنگام عرضه از سوی Apple در سال ۲۰۰۳ با مسئلهای پیچیدهتر روبهرو بود. موتور WebKit آن از KHTML متعلق به KDE منشعب شده بود، بنابراین از نظر فنی نه Netscape بود و نه Gecko. بااینحال، در عمل Safari باید از آزمونهای سازگاری نوشتهشده برای هر دو عبور میکرد.
Apple این مشکل را با اختصاص رشتهای user-agent به Safari حل کرد که به چندین تبار مرورگر اشاره میکرد، بیآنکه کاملاً ادعا کند به هیچیک از آنها تعلق دارد:
Mozilla/5.0 (Macintosh; ...) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.8
توسعهدهندگان WebKit بارها مستند کردهاند که چگونه بررسیهای user-agent میتوانند وبسایتهایی را که در حالت عادی سازگارند از کار بیندازند و حذف ایمن توکنهایی مانند ( KHTML, like Gecko ) را دشوار کنند. پیشوند Mozilla نیز به همین دلیل گستردهترِ سازگاری باقی ماند. چیزی که توصیفی گمراهکننده به نظر میرسید، به کد سازگاری اجتنابناپذیر تبدیل شده بود.
عبارت KHTML, like Gecko شاید صادقانهترین عبارت گمراهکننده در تاریخ مرورگرها باشد. این عبارت عملاً میگوید: «من Gecko نیستم، اما لطفاً طوری رفتار کنید که انگار هستم.»
Chrome همه لایهها را به ارث برد و Chrome را به آنها افزود
Safari انتهای رشته نقشی حیاتی دارد

Google در سال ۲۰۰۸ مرورگر Chrome را با استفاده از WebKit، همان موتور رندرِ پشت Safari، عرضه کرد. تا آن زمان، برخی وبسایتها مسیرهای کد مختص WebKit ساخته بودند که پیش از ارائه نسخه مورد انتظار یک صفحه، بهدنبال واژه Safari میگشتند. حذف این توکن میتوانست سایتهایی را که از قبل کار میکردند از کار بیندازد؛ بنابراین Chrome ساختار user-agent متعلق به Safari را حفظ کرد و شناسه Chrome/x.x.x.x خود را پیش از آن قرار داد.
رشته حاصل، فسیل دیگری را در قالب AppleWebKit/۵۳۷.۳۶ حفظ کرد. Chrome در سال ۲۰۱۳ از WebKit به موتور رندر Blink مهاجرت کرد، اما Chromium برای حفظ سازگاری، هر دو عبارت AppleWebKit/۵۳۷.۳۶ و Safari/۵۳۷.۳۶ را نگه داشت. این توکنها دیگر موتور رندر واقعی Chrome را توصیف نمیکنند، اما تغییر قالب جاافتاده میتواند اسکریپتهایی را که بر مبنای ساختار قدیمی نوشته شدهاند سردرگم کند.
این وراثت اکنون چندین لایه عمق دارد. Chrome شناسههایی را حمل میکند که از Safari به ارث رسیدهاند، رشته Safari به KHTML اشاره میکند و میگوید شبیه Gecko است، و کل این زنجیره همچنان با Mozilla آغاز میشود. مرورگر Edge مبتنی بر Chromium متعلق به Microsoft نیز با افزودن Edg/ به انتهای رشته user-agent به سبک Chrome، که از قبل همه موارد بالا را در خود دارد، لایه دیگری اضافه میکند.
مرورگرها سرانجام در تلاشاند این وضعیت را اصلاح کنند
UA کاهشیافته و Client Hints، با بیست سال تأخیر





رشته user-agent اکنون برای شناسایی دقیق یک مرورگر مناسب نیست، اما همچنان به اثرانگشتبرداری مرورگر کمک میکند؛ روشی که حتی با وجود VPN نیز میتواند شما را شناسایی کند، زیرا جزئیات سیستمعامل، دستگاه، معماری و نسخه به متمایز کردن یک کاربر از دیگری کمک میکنند. Google در سال ۲۰۲۲ عرضه تدریجی User-Agent Reduction را برای محدود کردن اطلاعات در دسترس آغاز کرد. Chrome اکنون بخش عمدهای از جزئیات را ثابت نگه میدارد یا حذف میکند و یک پلتفرم سادهشده و نسخه فرعی عمومی مانند ۱۵۱.۰.۰.۰ را گزارش میدهد.
مرورگرهای مبتنی بر Chromium رشته کاهشیافته را با User-Agent Client Hints تکمیل میکنند. در درخواستهای امن، Chromium بهطور پیشفرض اطلاعات کمآنتروپی مانند نام تجاری مرورگر، نسخه اصلی، پلتفرم و اینکه آیا دستگاه همراه است یا خیر را ارائه میکند. سرور باید جزئیات پرآنتروپی و هویتنمای بیشتری مانند نسخه کامل مرورگر، مدل دستگاه، معماری پردازنده یا نسخه دقیق سیستمعامل را صراحتاً درخواست کند و مرورگر نیز میتواند اطلاعاتی را که بازمیگرداند محدود کند.
Firefox و Safari رویکردهای خاص خود را برای کاهش اطلاعات user-agent در پیش گرفتهاند. Firefox برخی جزئیات پلتفرم را ثابت یا مبهم میکند، درحالیکه Safari نیز نسخههای گزارششده سیستمعامل را ثابت نگه داشته است. هیچیک سیستم Client Hints متعلق به Chromium را نپذیرفتهاند و هر دو همچنان توسعهدهندگان را تشویق میکنند بهجای تلاش برای شناسایی مرورگر بازدیدکننده، بررسی کنند که آیا یک قابلیت پشتیبانی میشود یا خیر.
کاهش اطلاعات میتواند جزئیات هویتنما را حذف کند، اما نمیتواند توکنهای تاریخی سازگاری پیرامون آنها را با خیال آسوده پاک کند. ممکن است هنوز وبسایتها، فیلترهای سازمانی، کتابخانهها و ابزارهای تحلیل بسیار زیادی به ساختار قدیمی وابسته باشند.
گذرواژهای که هیچکس نمیتواند تغییر دهد
بخش بزرگی از رشته user-agent متعلق به Chrome به نرمافزارهایی اشاره دارد که دیگر مستقیماً از آنها استفاده نمیکند. Netscape از میان رفته است، KHTML بهجای آنکه موتور Chrome باشد یکی از نیاکان آن است، و با اینکه Chrome در سال ۲۰۱۳ به Blink مهاجرت کرد، AppleWebKit/۵۳۷.۳۶ همچنان در این رشته باقی مانده است.
این رشته همچنان باقی مانده است، زیرا تقریباً بهمحض آنکه وبسایتها پیش از تصمیمگیری درباره اینکه چه چیزی ارسال کنند شروع به بررسی آن کردند، دیگر یک توصیف ساده و سرراست نبود. از آن لحظه، این رشته به یک اعتبارنامه تبدیل شد و اعتبارنامهها را همه کسانی که همچنان باید وارد شوند، به نسلهای بعدی منتقل میکنند. Chrome به همان دلیلی خود را Mozilla معرفی میکند که یک تابع سیساله هنوز پارامتری دارد که هیچکس جرئت حذفش را ندارد.
جایی در میان انبوه کدهای گردآمده وب، احتمالاً هنوز یک بررسی سازگاری که در عصر فریمها نوشته شده است تصمیم میگیرد یک مرورگر چه چیزی را میتواند ببیند.
منبع: این مطلب ترجمه و بومیسازی مقالهای از MakeUseOf به قلم Oluwademilade Afolabi است. مشاهده مقاله اصلی