stringtranslate.com

HTTP-этаг

ETag или тег объекта является частью HTTP , протокола Всемирной паутины . Это один из нескольких механизмов, предоставляемых HTTP для проверки веб-кэша , который позволяет клиенту выполнять условные запросы. Этот механизм позволяет кэшам быть более эффективными и экономить полосу пропускания, поскольку веб-серверу не нужно отправлять полный ответ, если содержимое не изменилось. ETags также можно использовать для оптимистического управления параллелизмом [1] , чтобы предотвратить перезапись одновременных обновлений ресурса.

ETag — это непрозрачный идентификатор, присваиваемый веб-сервером определенной версии ресурса, найденного по URL-адресу . [2] Если представление ресурса по этому URL-адресу когда-либо изменится, будет назначен новый и другой ETag. Используемые таким образом ETags подобны отпечаткам пальцев , и их можно быстро сравнить, чтобы определить, являются ли два представления ресурса одинаковыми.

Генерация ETag

Использование ETags в заголовке HTTP не является обязательным (не обязательным, как в случае с некоторыми другими полями заголовка HTTP 1.1). Метод создания ETags никогда не был указан в спецификации HTTP.

Общие методы генерации ETag включают использование устойчивой к коллизиям хеш-функции содержимого ресурса, хэша временной метки последней модификации или даже просто номера версии .

Чтобы избежать использования устаревших данных кэша, методы, используемые для создания ETag, должны гарантировать (насколько это практически возможно), что каждый ETag уникален. Однако функцию генерации ETag можно считать «пригодной для использования», если можно доказать (математически), что дублирование ETag будет «приемлемо редким», даже если оно может или произойдет.

В RFC-7232 прямо указано, что ETags должны учитывать кодирование контента , например

ETag: «123-a» — без кодирования контента.ETag: «123-b» – для кодирования контента: gzip.

Известно, что некоторые более ранние функции контрольной суммы , которые были слабее, чем CRC32 или CRC64, страдают от проблем хеш-коллизий. Таким образом, они не были хорошими кандидатами для использования при генерации ETag.

Сильная и слабая валидация

Механизм ETag поддерживает как строгую , так и слабую проверку . Их отличает наличие начальной буквы «W/» в идентификаторе ETag, а именно:

«123456789» — сильный валидатор ETag.W/"123456789" – слабый валидатор ETag.

Соответствие ETag со строгой проверкой указывает на то, что содержимое двух представлений ресурсов побайтно идентично и что все остальные поля сущности (например, Content-Language) также не изменились. Сильные ETags позволяют кэшировать и собирать частичные ответы, как и в случае с запросами диапазона байтов .

Соответствие ETag со слабой проверкой указывает только на то, что два представления семантически эквивалентны , а это означает, что для практических целей они взаимозаменяемы и что можно использовать кэшированные копии. Однако представления ресурсов не обязательно побайтно идентичны, и поэтому слабые ETags не подходят для запросов диапазона байтов. Слабые ETag могут быть полезны в тех случаях, когда создание сильных ETag нецелесообразно для веб-сервера, например, при динамически генерируемом контенте .

Типичное использование

При типичном использовании при получении URL-адреса веб-сервер возвращает текущее представление ресурса вместе с соответствующим значением ETag, которое помещается в поле «ETag» заголовка HTTP-ответа:

ETag: "686897696a7c876b7e"

Затем клиент может решить кэшировать представление вместе с его ETag. Позже, если клиент захочет снова получить тот же ресурс URL-адреса, он сначала определит, истек ли срок действия локально кэшированной версии URL-адреса (через заголовки Cache-Control и Expire). Если срок действия URL-адреса не истек, он получит локально кэшированный ресурс. Если будет определено, что срок действия URL-адреса истек ( устарел ), клиент отправит запрос на сервер, который включает ранее сохраненную копию ETag в поле «If-None-Match». [2]

Если-Нет-Соответствия: "686897696a7c876b7e"

При этом последующем запросе сервер теперь может сравнить ETag клиента с ETag текущей версии ресурса. Если значения ETag совпадают, то есть ресурс не изменился, сервер может отправить обратно очень короткий ответ со статусом HTTP 304 Not Modified . Статус 304 сообщает клиенту, что его кэшированная версия все еще хороша и что ему следует ее использовать.

Однако если значения ETag не совпадают, что означает, что ресурс, вероятно, изменился, возвращается полный ответ, включая содержимое ресурса, как если бы ETag не использовался. В этом случае клиент может решить заменить свою ранее кэшированную версию вновь возвращенным представлением ресурса и новым ETag.

Значения ETag можно использовать в системах мониторинга веб-страниц . Эффективному мониторингу веб-страниц препятствует тот факт, что большинство веб-сайтов не устанавливают заголовки ETag для веб-страниц. Когда веб-монитор не имеет подсказок о том, был ли изменен веб-контент, весь контент необходимо извлечь и проанализировать, используя вычислительные ресурсы как издателя, так и подписчика.

Обнаружение несовпадающего ETag

Веб-сайт с ошибками иногда может не обновить ETag после обновления его семантического ресурса. По состоянию на 2019 год примером известного такого сайта является Export.arxiv.org . [3] В результате неправильно возвращенный ответ имеет статус 304, и клиент не может получить обновленный ресурс. Чтобы обнаружить такой глючный сайт:

Отслеживание с помощью ETags

ETags можно использовать для отслеживания уникальных пользователей, [4] поскольку файлы cookie HTTP все чаще удаляются пользователями, заботящимися о конфиденциальности. В июле 2011 года Ашкан Солтани и группа исследователей из Калифорнийского университета в Беркли сообщили, что ряд веб-сайтов, включая Hulu , использовали ETags для отслеживания. [5] Hulu и KISSmetrics прекратили «возрождаться» с 29 июля 2011 года, [6] поскольку KISSmetrics и более 20 ее клиентов столкнулись с коллективным иском по поводу использования «неудаляемых» файлов cookie отслеживания , частично связанных с использованием ETags. [7]

Поскольку ETag кэшируются браузером и возвращаются с последующими запросами одного и того же ресурса, сервер отслеживания может просто повторить любой ETag, полученный от браузера, чтобы гарантировать, что назначенный ETag сохраняется на неопределенный срок (аналогично постоянным файлам cookie ). Дополнительные заголовки кэширования также могут улучшить сохранность данных ETag. [8]

ETags можно сбросить, очистив кеш браузера (реализации различаются).

Рекомендации

  1. ^ «Редактирование в Интернете - обнаружение проблемы с потерянным обновлением с помощью незарезервированной проверки» . Примечание W3C . 10 мая 1999 г.
  2. ^ ab «ETag ​​– HTTP | MDN». http://developer.mozilla.org . Проверено 10 октября 2021 г.
  3. ^ «Несоответствующий ETag Export.arxiv.org» .
  4. ^ «отслеживание без файлов cookie». 17 февраля 2003 г.
  5. ^ Айенсон, Мика Д.; Вамбах, Дитрих Джеймс; Солтани, Ашкан; Хорошо, Натан; Хуфнэгл, Крис Джей (29 июля 2011 г.). «Flash Cookies и конфиденциальность II: теперь с возрождением HTML5 и ETag». ССНР  1898390.
  6. Солтани, Ашкан (11 августа 2011 г.). «Flash Cookies и конфиденциальность II». askansoltani.org . Проверено 27 июня 2023 г.
  7. Энтони, Себастьян (4 августа 2011 г.). «AOL, Spotify, GigaOm, Etsy, KISSmetrics подали в суд из-за неудаляемых файлов cookie для отслеживания». ЭкстримТех . Проверено 27 июня 2023 г.
  8. ^ «Печенье без печенья» . GitHub lucb1e . 25 августа 2013 года . Проверено 27 июня 2023 г.

Внешние ссылки