Международный стандарт |
|
---|---|
Разработано | Google , W3C |
Веб-сайт | https://wicg.github.io/ua-client-hints/ |
Client Hints — это расширение протокола HTTP , которое позволяет серверам запрашивать у клиента (обычно веб-браузера ) информацию о его конфигурации. Это может затем помочь серверу адаптировать свои ответы к клиенту; например, сервер может выбрать отправку меньшего изображения, если клиент сообщает, что у него очень маленький экран. Клиент может выбрать ответ на этот запрос, сообщив запрошенную информацию о себе, отправив данные с помощью определенной части протокола HTTP, называемой полями заголовка HTTP , или предоставив ту же информацию коду JavaScript , выполняемому на веб-странице.
Предложенный инженерами Google в 2013 году, Client Hints был разработан как ориентированная на конфиденциальность альтернатива заголовкам user-agent . Это было сделано в рамках инициативы Google под названием Privacy Sandbox . Заголовки user-agent представляют собой фрагменты кода, отправляемые клиентом для идентификации себя на сервер. Хотя изначально эти заголовки предназначались для статистических целей, они все больше становились инструментом для отслеживания пользователей на веб-сайтах. Client Hints был направлен на решение этой проблемы, предоставляя более контролируемый способ обмена той же информацией. Несмотря на акцент на конфиденциальности, первоначальный дизайн Client Hints подвергся критике со стороны других браузеров. Одной из основных проблем, которая была поднята, было то, что протокол может позволить новые формы отслеживания сторонними доменами. Сторонние домены — это веб-серверы, не принадлежащие веб-сайту, которые загружают такие ресурсы, как изображения и файлы скриптов. Несмотря на эти проблемы, Chrome реализовал поддержку Client Hints в августе 2020 года. К 2024 году более 75% веб-пользователей имели браузеры, поддерживающие Client Hints.
Исследователи конфиденциальности с тех пор высказывают опасения, что Client Hints в основном используется кодом JavaScript, который отслеживает пользователей. В 2023 году исследование KU Leuven и Radboud University показало, что при изучении 100 000 лучших веб-сайтов в Интернете большинство обращений к Client Hints осуществлялось из кода JavaScript, используемого для отслеживания и рекламы .
В 1992 году было введено расширение протокола HTTP , добавившее User-Agent
заголовок HTTP , который отправлялся от клиента к серверу и содержал простую строку, идентифицирующую имя клиента и его версию. Заголовок предназначался исключительно для статистических целей и для отслеживания клиентов, которые нарушали протокол. С тех пор заголовки User-Agent становились все более сложными и начали содержать значительную уникальную идентифицируемую информацию о пользователе. Часто эта информация используется для выполнения отпечатков браузера , что позволяет сайтам отслеживать пользователей на сайтах пассивно, без необходимости загрузки какого-либо JavaScript для пользователя. [1]
Первоначальный проект спецификации Client Hint был предложен в 2013 году инженерами Google . Спецификации стали проектом Internet Engineering Task Force (IETF) в ноябре 2015 года. В 2021 году спецификация была повышена до статуса экспериментального запроса на комментарий (RFC). [2] Это обозначение означало, что IETF приняла спецификацию Client Hints в качестве интернет-стандарта , но она либо все еще имела нерешенные вопросы, либо еще не получила широкого распространения в Интернете. [3] Примерно в то же время спецификации того, как веб-браузер будет обрабатывать HTTP Client Hints в Интернете, были опубликованы в качестве черновика в отчете группы сообщества W3C . [2]
В 2020 году Google объявила о своем намерении отменить декларацию user-agent (UA) браузером. [4] Это прекращение было частью более широкой инициативы Google по внесению изменений в сеть, которые позволят веб-сайтам получать доступ к пользовательской информации без ущерба для конфиденциальности , называемой Privacy Sandbox . Они сослались на Client Hints как на сохраняющую конфиденциальность альтернативу заголовкам user-agent, поскольку они позволяли более контролируемый способ обмена той же информацией. [5] Однако первоначальное предложение Client Hints было встречено сопротивлением со стороны других браузеров из-за проблем с конфиденциальностью. В 2019 году Brave выразила обеспокоенность по поводу первоначального предложения, сославшись на способы, которыми оно могло быть использовано для отслеживания пользователей в Интернете. [6] Mozilla , компания, которая производит Firefox , изначально классифицировала предложение как вредоносное, а Apple , компания, которая производит Safari, также заняла негативную позицию по отношению к предложению. [7] Несмотря на эти опасения, Chrome реализовал поддержку HTTP Client Hints в августе 2020 года. Хотя прекращение поддержки строк UA было отложено из-за пандемии COVID-19 , этот процесс был завершен в феврале 2023 года. [8]
После своего первоначального сопротивления Mozilla обновила свою позицию до нейтральной [7] , а Brave синхронизировала свою реализацию клиентских подсказок с реализацией Chrome. [2] По состоянию на 2024 год более 75% всех веб-пользователей используют браузеры, поддерживающие клиентские подсказки. [2]
Протокол клиентских подсказок определяет две сущности: пользовательский агент (UA) (обычно браузер ) и сервер . Эти две сущности взаимодействуют друг с другом, чтобы договориться о том, какой тип контента должен быть предоставлен пользователю. [9] Процесс включает в себя отправку сервером UA ответа с Accept-CH
заголовком HTTP , содержащим список заголовков HTTP клиентских подсказок, которые ему требуются. [2] Впоследствии ожидается, что UA будет возвращать запрошенные клиентские подсказки с каждым последующим ответом, при условии, что он поддерживает эти подсказки. Затем эти заголовки используются сервером для принятия решений о том, какой тип контента обслуживать UA. [9] Если UA не понимает или не поддерживает определенную клиентскую подсказку, то UA получает указание игнорировать определенную клиентскую подсказку. В случаях, когда конкретная клиентская подсказка не может быть кэширована , сервер должен указать применимые заголовки клиентских подсказок в отдельном Vary
заголовке, отправленном UA. Это гарантирует, что механизмы кэширования понимают, что ответы могут различаться в зависимости от различных значений клиентских подсказок. [9] Для клиентских подсказок, которые конкретно идентифицируют браузер, в качестве смазки включены дополнительные случайные идентификаторы браузера , чтобы помешать пользователям протокола полагаться на специфическое поведение браузера. [10] [11]
Для UA, которые разрешают JavaScript , дополнительная опция доступна через navigator.userAgentData
JavaScript API . Этот API позволяет JavaScript извлекать ту же информацию, что и предоставленные заголовками Client Hints. [11] API разделяет предоставляемые им данные на два типа: данные с низкой энтропией и данные с высокой энтропией. Данные с низкой энтропией соответствуют информации, которая, вероятно, будет схожей для большой группы пользователей, например, платформа, на которой работает браузер, и марка браузера. Напротив, данные с высокой энтропией могут значительно различаться между пользователями, включая такие детали, как точный номер версии браузера и модель устройства пользователя. Данные с низкой энтропией включены в API как параметры объекта, тогда как данные с высокой энтропией, которые могут однозначно идентифицировать пользователя, должны быть явно получены клиентом путем вызова функции getHighEntropyValues()
в API, которая позволяет браузеру запрашивать разрешение пользователя или выполнять дополнительные проверки. [12]
Чтобы инициировать согласование контента , HTTP-сервер добавляет Accept-CH
заголовок к ответу HTTP-запроса:
HTTP / 1.1 200 ОК ...Accept-CH: Ширина области просмотра...
Если пользовательский агент поддерживает клиентскую подсказку ширины области просмотра, пользовательский агент будет добавлять Viewport-Width
заголовок в каждый последующий запрос.
GET /галерея HTTP / 1.1 ...Ширина области просмотра: 1920...
Затем сервер может использовать информацию в Viewport-Width
заголовке для принятия решения о типе контента, который будет обслуживать клиента. Например, если на сервере есть определенное изображение, которое очень большое, сервер можно настроить так, чтобы он возвращал меньшее изображение, если изображение не помещается в область просмотра . [13]
Когда предложение Client Hints было первоначально опубликовано, оно было встречено значительными проблемами конфиденциальности. Поставщики браузеров, такие как Brave и Mozilla, указали, что конкретное положение в первоначальном проекте предложения позволяло веб-сайтам давать указание браузеру предоставлять данные Client Hint сторонним доменам. Сторонние домены — это домены, которые не выполняют какой-либо код JavaScript, а вместо этого загружают ресурсы, такие как изображения и файлы скриптов. [6] Положение в первоначальном проекте позволяло бы этим сторонним доменам, таким как сети доставки контента (CDN), которые распределяют контент веб-сайта по сети географически распределенной группы серверов, повышать скорость и надежность веб-сайта и поставщиков облачных услуг, таких как Cloudflare и Google Cloud , которые предлагают такие услуги, как хранение данных, вычислительная мощность и инфраструктура для веб-сайтов и приложений, отслеживать пользователей по всему Интернету, давая указание браузеру отправлять информацию Client Hint на их серверы. [6] [14] Также высказывались опасения, что предложение Client-Hint было слишком разрешительным и явно допускало утечку на серверы новой информации, нарушающей конфиденциальность, которую нельзя было получить простым чтением заголовков HTTP . [14] Кроме того, расширения, направленные на сохранение конфиденциальности пользователя, такие как расширение NoScript, также выступили против предложения на том основании, что оно значительно затруднит предотвращение утечки сайтами информации, нарушающей конфиденциальность пользователей. [6]
С момента принятия клиентских подсказок основными браузерами, такими как Google Chrome и Microsoft Edge , исследователи конфиденциальности выразили обеспокоенность по поводу их реального использования для отслеживания. [15] Исследование, проведенное в 2023 году исследователями из KU Leuven и Radboud University, показало, что из 100 000 лучших веб-сайтов 60% файлов JavaScript, загружаемых веб-страницами, обращались к API JavaScript клиентских подсказок , причем большинство из них были скриптами отслеживания и рекламы , многие из которых поступили от Google . Более 90% этих файлов скриптов передавали полученные данные в домены отслеживания. [16] Последующее исследование, проведенное в мае 2024 года исследователями из Университета прикладных наук Hochschule Bonn-Rhein-Sieg, отметило, что, хотя общее принятие клиентских подсказок среди веб-сайтов в Интернете было низким, значительное количество сторонних доменов, известных отслеживанием, обращались к данным HTTP-клиентских подсказок. [17]