تحسين خصوصية المستخدم وتجربة المطوّرين من خلال ميزة User-Agent Client Hints

"تلميحات العميل لوكيل المستخدم" هي توسيع جديد لواجهة Client Hints API، يتيح للمطوّرين الوصول إلى معلومات حول متصفّح المستخدم بطريقة مريحة تحافظ على الخصوصية.

تتيح "تلميحات البرامج" للمطوّرين أن يطلبوا بشكل نشط معلومات عن جهاز المستخدم أو شروطه، بدلاً من الحاجة إلى تحليلها خارج سلسلة وكيل المستخدم (UA). ويُعد توفير هذا المسار البديل الخطوة الأولى لتقليل دقة سلسلة وكيل المستخدم.

تعرَّف على كيفية تعديل الوظائف الحالية التي تعتمد على تحليل سلسلة وكيل المستخدم للاستفادة من "تلميحات العميل لوكيل المستخدم" بدلاً من ذلك.

الخلفية

عندما تقدّم متصفحات الويب طلبات، فإنها تتضمّن معلومات عن المتصفّح وبيئته حتى تتمكّن الخوادم من تفعيل الإحصاءات وتخصيص الاستجابة. تم تحديد ذلك منذ عام 1996 (RFC 1945 لـ HTTP/1.0)، حيث يمكنك العثور على التعريف الأصلي لسلسلة وكيل المستخدم، والذي يتضمن مثالاً:

User-Agent: CERN-LineMode/2.15 libwww/2.17b3

تم تصميم هذا العنوان لتحديد المنتج، حسب أهميته، (مثل المتصفح أو المكتبة) وتعليقًا (مثل الإصدار).

حالة سلسلة وكيل المستخدم

على مدار العقود المتداخلة، جمعت هذه السلسلة مجموعة متنوعة من التفاصيل الإضافية حول العميل الذي قدّم الطلب (بالإضافة إلى البيانات غير المرغوب فيها، بسبب التوافق مع الإصدارات القديمة). يمكننا أن نرى ذلك عند البحث عن سلسلة وكيل المستخدم الحالية في Chrome:

Mozilla/5.0 (Linux; Android 10; Pixel 3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4076.0 Mobile Safari/537.36

تحتوي السلسلة أعلاه على معلومات حول نظام تشغيل المستخدم وإصداره، وطراز الجهاز، والعلامة التجارية للمتصفّح، والإصدار الكامل منه، بالإضافة إلى أدلة كافية لاستنتاج أنّه متصفّح متوافق مع الأجهزة الجوّالة، فضلًا عن عدد من المراجع إلى المتصفّحات الأخرى لأسباب سابقة.

يعني الجمع بين هذه المعلمات والتنوع الكبير في القيم المحتملة أن سلسلة وكيل المستخدم يمكن أن تحتوي على معلومات كافية للسماح بتحديد المستخدمين الفرديين بشكل فريد.

تتيح سلسلة وكيل المستخدم العديد من حالات الاستخدام الصالحة، وتخدم غرضًا مهمًا لمطوّري البرامج ومالكي المواقع الإلكترونية. ومع ذلك، من المهم أيضًا حماية خصوصية المستخدمين من طرق التتبّع الخفية، ويتعارض إرسال معلومات Universal Analytics تلقائيًا مع هذا الهدف.

هناك حاجة أيضًا إلى تحسين التوافق على الويب عندما يتعلق الأمر بسلسلة وكيل المستخدم. فهي غير مهيكلة، لذا يؤدي تحليلها إلى تعقيدات غير ضرورية، والتي غالبًا ما تتسبب في حدوث أخطاء ومشكلات توافق في الموقع تُلحق الضرر بالمستخدمين. إضافةً إلى ذلك، فإنّ هذه المشاكل تضرّ مستخدمي المتصفّحات الأقل شيوعًا بشكل غير متناسب، إذ ربما تعذّر على المواقع الإلكترونية اختبار إعداداتها.

لمحة عن ميزة User-Agent Client Hints الجديدة

تتيح تلميحات عميل وكيل المستخدم الوصول إلى المعلومات نفسها ولكن بطريقة أكثر الحفاظ على الخصوصية، ما يتيح للمتصفّحات في النهاية تقليل الإعداد التلقائي لسلسلة User-Agent، وهو بث كل المحتوى. تفرض تلميحات العميل نموذجًا حيث يجب على الخادم أن يطلب من المتصفّح مجموعة من البيانات حول العميل (التلميحات) ويطبّق المتصفّح سياساته الخاصة أو إعدادات المستخدم لتحديد البيانات التي يتم عرضها. ويعني هذا أنّه بدلاً من الكشف عن جميع معلومات وكيل المستخدم تلقائيًا، تتم الآن إدارة إمكانية الوصول بطريقة صريحة وقابلة للتدقيق. ويستفيد المطوّرون أيضًا من واجهة برمجة التطبيقات الأبسط، ما مِن تعبيرات منتظمة أخرى.

تصف المجموعة الحالية من "تلميحات العميل" بشكل أساسي إمكانات عرض المتصفح والاتصال. ويمكنك استكشاف التفاصيل في أتمتة اختيار الموارد باستخدام تلميحات العميل، ولكن إليك تنشيطًا سريعًا للذاكرة حول هذه العملية.

يطلب الخادم "تلميحات العميل" المحددة عبر العنوان:

⬇️ ردّ من الخادم

Accept-CH: Viewport-Width, Width

أو علامة وصفية:

<meta http-equiv="Accept-CH" content="Viewport-Width, Width" />

ويمكن للمتصفح بعد ذلك اختيار إرسال العناوين التالية مرة أخرى في الطلبات اللاحقة:

⬆️ الطلب اللاحق

Viewport-Width: 460
Width: 230

يمكن للخادم اختيار تغيير ردوده، على سبيل المثال، من خلال عرض الصور بدرجة دقة مناسبة.

تعمل ميزة User-Agent Client Hints على توسيع نطاق السمات باستخدام البادئة Sec-CH-UA التي يمكن تحديدها من خلال عنوان استجابة الخادم Accept-CH. للاطّلاع على جميع التفاصيل، ابدأ بالفيديو التوضيحي ثم اطّلِع على الاقتراح الكامل.

حقول معلومات الوكيل المستخدم من Chromium 89

تم تفعيل حقول معلومات الوكيل المستخدم تلقائيًا في Chrome منذ الإصدار 89.

يعرض المتصفّح تلقائيًا العلامة التجارية للمتصفّح، والإصدار المهم أو الرئيسي، والنظام الأساسي، ومؤشر إذا كان العميل جهازًا جوّالاً:

⬆️ كل الطلبات

Sec-CH-UA: "Chromium";v="93", "Google Chrome";v="93", " Not;A Brand";v="99"
Sec-CH-UA-Mobile: ?0
Sec-CH-UA-Platform: "macOS"

عناوين استجابة وكيل المستخدم وطلباتها

⬇️ الرد Accept-CH
⬆️ عنوان الطلب
⬆️ طلب
مثال على القيمة
الوصف
Sec-CH-UA "Chromium";v="84",
"Google Chrome";v="84"
قائمة بالعلامات التجارية للمتصفّح وإصداراتها المهمة.
Sec-CH-UA-Mobile ?1 قيمة منطقية تشير إلى ما إذا كان المتصفّح على جهاز جوّال (يشير ?1 إلى القيمة true) أو لا (يشير ?0 إلى false).
Sec-CH-UA-Full-Version "84.0.4143.2" [تجاهل]الإصدار الكامل للمتصفِّح.
Sec-CH-UA-Full-Version-List "Chromium";v="84.0.4143.2",
"Google Chrome";v="84.0.4143.2"
قائمة بالعلامات التجارية للمتصفّحات وإصدارها الكامل.
Sec-CH-UA-Platform "Android" تمثّل هذه السمة النظام الأساسي للجهاز، وعادةً ما يكون نظام التشغيل (OS).
Sec-CH-UA-Platform-Version "10" تمثّل هذه السمة إصدار النظام الأساسي أو نظام التشغيل.
Sec-CH-UA-Arch "arm" البنية الأساسية للجهاز. على الرغم من أنّ هذا الإجراء قد لا يكون ذا صلة بعرض الصفحة، قد يرغب الموقع الإلكتروني في توفير عملية تنزيل يتم ضبطها تلقائيًا على التنسيق الصحيح.
Sec-CH-UA-Model "Pixel 3" طراز الجهاز
Sec-CH-UA-Bitness "64" وحدة بت البنية الأساسية (أي الحجم بوحدات بت لعدد صحيح أو عنوان ذاكرة)

مثال لتبادل الإعلانات

سيظهر نموذج التبادل كما يلي:

⬆️ الطلب الأولي من المتصفّح
يطلب المتصفّح صفحة /downloads من الموقع الإلكتروني ويرسل وكيل المستخدم الأساسي التلقائي.

GET /downloads HTTP/1.1
Host: example.site

Sec-CH-UA: "Chromium";v="93", "Google Chrome";v="93", " Not;A Brand";v="99"
Sec-CH-UA-Mobile: ?1
Sec-CH-UA-Platform: "Android"

⬇️ الرد من الخادم
يرسل الخادم الصفحة مرة أخرى ويطلب بالإضافة إلى ذلك إصدار المتصفّح الكامل والمنصة.

HTTP/1.1 200 OK
Accept-CH: Sec-CH-UA-Full-Version-List

⬆️ الطلبات اللاحقة
يمنح المتصفّح الخادم إمكانية الوصول إلى المعلومات الإضافية ويرسل التلميحات الإضافية في جميع الطلبات اللاحقة.

GET /downloads/app1 HTTP/1.1
Host: example.site

Sec-CH-UA: " Not A;Brand";v="99", "Chromium";v="98", "Google Chrome";v="98"
Sec-CH-UA-Mobile: ?1
Sec-CH-UA-Full-Version-List: " Not A;Brand";v="99.0.0.0", "Chromium";v="98.0.4738.0", "Google Chrome";v="98.0.4738.0"
Sec-CH-UA-Platform: "Android"

JavaScript API

إلى جانب العناوين، يمكن أيضًا الوصول إلى وكيل المستخدم في JavaScript من خلال navigator.userAgentData. يمكن الوصول إلى معلومات العناوين Sec-CH-UA وSec-CH-UA-Mobile وSec-CH-UA-Platform التلقائية من خلال السمتَين brands وmobile على التوالي:

// Log the brand data
console.log(navigator.userAgentData.brands);

// output
[
  {
    brand: 'Chromium',
    version: '93',
  },
  {
    brand: 'Google Chrome',
    version: '93',
  },
  {
    brand: ' Not;A Brand',
    version: '99',
  },
];

// Log the mobile indicator
console.log(navigator.userAgentData.mobile);

// output
false;

// Log the platform value
console.log(navigator.userAgentData.platform);

// output
"macOS";

يتم الوصول إلى القيم الإضافية من خلال استدعاء getHighEntropyValues(). يشير مصطلح "القصور العالي" إلى قصور المعلومات، بعبارة أخرى، مقدار المعلومات التي تكشفها هذه القيم عن متصفح المستخدم. وكما هو الحال عند طلب رؤوس إضافية، يعود الأمر إلى المتصفح بتحديد القيم التي يتم عرضها، إن وجدت.

// Log the full user-agent data
navigator
  .userAgentData.getHighEntropyValues(
    ["architecture", "model", "bitness", "platformVersion",
     "fullVersionList"])
  .then(ua => { console.log(ua) });

// output
{
   "architecture":"x86",
   "bitness":"64",
   "brands":[
      {
         "brand":" Not A;Brand",
         "version":"99"
      },
      {
         "brand":"Chromium",
         "version":"98"
      },
      {
         "brand":"Google Chrome",
         "version":"98"
      }
   ],
   "fullVersionList":[
      {
         "brand":" Not A;Brand",
         "version":"99.0.0.0"
      },
      {
         "brand":"Chromium",
         "version":"98.0.4738.0"
      },
      {
         "brand":"Google Chrome",
         "version":"98.0.4738.0"
      }
   ],
   "mobile":false,
   "model":"",
   "platformVersion":"12.0.1"
}

عرض توضيحي

يمكنك تجربة كل من العناوين وواجهة برمجة تطبيقات JavaScript على جهازك على user-agent-client-hints.glitch.me.

تلميح متعلّق بالوقت وإعادة الضبط

سيتم إرسال التلميحات المحدَّدة من خلال عنوان Accept-CH طوال مدة جلسة المتصفِّح أو إلى أن يتم تحديد مجموعة مختلفة من التلميحات.

وهذا يعني أنه إذا أرسل الخادم:

⬇️ الرد

Accept-CH: Sec-CH-UA-Full-Version-List

بعد ذلك، سيرسل المتصفّح العنوان Sec-CH-UA-Full-Version-List في جميع الطلبات لهذا الموقع الإلكتروني إلى أن يتم إغلاق المتصفّح.

⬆️ الطلبات اللاحقة

Sec-CH-UA-Full-Version-List: " Not A;Brand";v="99.0.0.0", "Chromium";v="98.0.4738.0", "Google Chrome";v="98.0.4738.0"

وإذا تم تلقّي عنوان Accept-CH آخر، سيؤدي ذلك إلى استبدال التلميحات الحالية التي يرسلها المتصفّح.

⬇️ الرد

Accept-CH: Sec-CH-UA-Bitness

⬆️ الطلبات اللاحقة

Sec-CH-UA-Platform: "64"

لن يتم إرسال الطلب Sec-CH-UA-Full-Version-List الذي سبق طلبه.

ويُفضَّل اعتبار العنوان Accept-CH يشير إلى أنّه يحدّد المجموعة الكاملة من التلميحات المطلوبة لتلك الصفحة، أي أنّ المتصفّح يرسل بعد ذلك التلميحات المحدّدة لجميع الموارد الفرعية في تلك الصفحة. بينما ستستمر التلميحات إلى عملية التنقل التالية، لا ينبغي أن يعتمد الموقع أو يفترض أنه سيتم تسليمها.

يمكنك أيضًا استخدام هذا الخيار لمحو جميع التلميحات التي يرسلها المتصفّح، وذلك من خلال إرسال قيمة Accept-CH فارغة في الردّ. يمكنك إضافة ذلك في أي مكان يُعيد فيه المستخدم ضبط التفضيلات أو يسجِّل الخروج من موقعك الإلكتروني.

يتطابق هذا النمط أيضًا مع طريقة عمل التلميحات من خلال علامة <meta http-equiv="Accept-CH" …>. ولن يتم إرسال التلميحات المطلوبة إلا بناءً على الطلبات التي بدأتها الصفحة وليس في أي عملية تنقُّل لاحقة.

نطاق التلميحات والطلبات الواردة من عدّة مصادر

سيتم إرسال "تلميحات العملاء" تلقائيًا في طلبات المصدر نفسه فقط. هذا يعني أنّك إذا طلبت تلميحات محدّدة عن https://example.com ولكنّ المراجع التي تريد تحسينها متوفّرة على https://downloads.example.com لن يتلقّى أي تلميحات.

للسماح بالملاحظات حول الطلبات من مصادر متعددة، يجب تحديد كل تلميح وأصل من خلال عنوان Permissions-Policy. لتطبيق ذلك على "تلميح عميل وكيل المستخدم"، عليك أحرف صغيرة في التلميح وإزالة البادئة sec-. مثلاً:

⬇️ ردّ من "example.com"

Accept-CH: Sec-CH-UA-Platform-Version, DPR
Permissions-Policy: ch-ua-platform-version=(self "downloads.example.com"),
                    ch-dpr=(self "cdn.provider" "img.example.com");

⬆️ طلب إرسال طلب إلى downloads.example.com

Sec-CH-UA-Platform-Version: "10"

⬆️ طلبات إلى cdn.provider أو img.example.com

DPR: 2

أين يمكن استخدام ميزة User-Agent Client Hints؟

الإجابة السريعة هي أنّه عليك إعادة تحديد أي حالات يتم فيها تحليل عنوان وكيل المستخدم أو استخدام أي من طلبات JavaScript التي تصل إلى المعلومات نفسها (مثل navigator.userAgent أو navigator.appVersion أو navigator.platform) للاستفادة من "تلميحات عميل وكيل المستخدم" بدلاً من ذلك.

وإذا أردت التعمق أكثر في هذا الأمر، يجب إعادة فحص استخدامك لمعلومات وكيل المستخدم، واستبدالها بأساليب أخرى كلما أمكن ذلك. ويمكنك غالبًا تحقيق الهدف نفسه من خلال الاستفادة من التحسين التدريجي أو اكتشاف الميزات أو التصميم سريع الاستجابة. تكمن المشكلة الأساسية في الاعتماد على بيانات وكيل المستخدم في أنك تحافظ دائمًا على الربط بين الموقع الذي تفحصه والسلوك الذي يُفعِّله. وذلك من خلال تنفيذ إجراءات صيانة عامة للتأكد من أن عملية الرصد شاملة وتظل محدَّثة.

مع وضع هذه التنبيهات في الاعتبار، يسرد مستودع معلومات وكيل المستخدم بعض حالات الاستخدام الصالحة للمواقع الإلكترونية.

ماذا يحدث لسلسلة وكيل المستخدم؟

وتهدف الخطة إلى تقليل قدرة التتبّع السري على الويب عن طريق تقليل كمية معلومات تحديد الهوية التي تكشفها سلسلة وكيل المستخدم الحالية مع عدم التسبّب في انقطاع غير مبرّر في المواقع الإلكترونية الحالية. باستخدام ميزة User-Agent Client Hints، يمكنك الآن التعرّف على الإمكانيات الجديدة وتجربة استخدامها، قبل إجراء أي تغييرات على سلاسل وكيل المستخدم.

وأخيرًا، سيتم تقليل المعلومات الواردة في سلسلة وكيل المستخدم كي تحافظ على التنسيق القديم مع توفير نفس المتصفح عالي المستوى ومعلومات الإصدار المهمة فقط وفقًا للتلميحات التلقائية. في Chromium، تم تأجيل هذا التغيير حتى عام 2022 على الأقل لتوفير وقت إضافي للمنظومة المتكاملة لتقييم إمكانات "تلميحات وكيل المستخدم" الجديدة.

يمكنك اختبار إصدار من ذلك من خلال تفعيل علامة about://flags/#reduce-user-agent من Chrome 93 (ملاحظة: تمت تسمية هذه العلامة باسم about://flags/#freeze-user-agent في الإصدارات Chrome 84 - 92). سيؤدي ذلك إلى عرض سلسلة بالإدخالات السابقة لأسباب تتعلق بالتوافق، ولكن مع تفاصيل تم تصحيحها. على سبيل المثال:

Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Mobile Safari/537.36

صورة مصغّرة من سيرغي زولكين على Un التصميم