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

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

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

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

الخلفية

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

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

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

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

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

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 الجديدة

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

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

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

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

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 API على جهازك الخاص على 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) للاستفادة من "تلميحات برنامج وكيل المستخدم" بدلاً من ذلك.

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

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

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

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

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

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

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

صورة مصغّرة بواسطة سيرغي زولكين في إلغاء البداية