Spec-Zone.ru › HTTP

Заголовки: ETag

Заголовок ETag

Базовая поддержка Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в различных версиях браузеров. Она доступна в браузерах с июля 2015 года.

  • Подробнее
  • Полная информация о совместимости
>

Заголовок ответа HTTP ETag (тег сущности) — это идентификатор определённой версии ресурса. Он позволяет кешам работать эффективнее и экономить пропускную способность, поскольку веб-серверу не нужно повторно отправлять полный ответ, если его содержимое не изменилось. Кроме того, ETag помогает предотвращать перезапись одновременных изменений ресурса («коллизии одновременного редактирования»).

Если ресурс по заданному URL меняется, необходимо создать новое значение ETag. Их сравнение позволяет определить, совпадают ли два представления ресурса.

Тип заголовка Заголовок ответа, заголовок представления
Запрещённый заголовок запроса Нет

Синтаксис

ETag: W/"<etag_value>"
ETag: "<etag_value>"

Директивы

W/ Необязательно

W/ (с учётом регистра) указывает на использование слабого валидатора. Слабые ETag легко создавать, но они гораздо менее полезны для сравнения. Сильные валидаторы идеально подходят для сравнения, однако их эффективное создание может быть очень сложным. Слабые значения ETag двух представлений одного ресурса могут быть семантически эквивалентны, но не совпадать побайтно. Это означает, что слабые ETag препятствуют кешированию при использовании запросов диапазона байтов, тогда как сильные ETag позволяют кешировать запросы диапазона.

<etag_value>

Тег сущности, который однозначно представляет запрошенный ресурс. Это строка из символов ASCII, заключённая в двойные кавычки, например "675af34563dc-tr34". Способ создания значений ETag не определён. Обычно значение ETag представляет собой хеш содержимого, хеш времени последнего изменения или просто номер редакции. Например, движок вики может использовать шестнадцатеричный хеш содержимого статьи документации.

Примеры

ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
ETag: W/"0815"

Предотвращение коллизий одновременного редактирования

С помощью заголовков ETag и If-Match можно обнаружить коллизии (конфликты) при одновременном редактировании.

Например, при редактировании вики текущее содержимое страницы можно хешировать и помещать в заголовок ETag ответа:

ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"

При сохранении изменений на странице вики (отправке данных) запрос POST будет содержать заголовок If-Match со значениями ETag для проверки актуальности.

If-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"

Если хеши не совпадают, значит, документ был отредактирован за это время, и возникает ошибка 412 Precondition Failed.

Кеширование неизменённых ресурсов

Ещё один типичный способ использования заголовка ETag — кеширование ресурсов, которые не изменились. Если пользователь снова посещает URL (для которого задан ETag), а кешированная версия устарела (слишком старая, чтобы считаться пригодной к использованию), клиент отправляет значение своего ETag в поле заголовка If-None-Match:

If-None-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"

Сервер сравнивает ETag клиента (отправленный с помощью If-None-Match) с ETag текущей версии ресурса. Если значения совпадают (то есть ресурс не изменился), сервер возвращает статус 304 Not Modified без тела ответа, сообщая клиенту, что кешированную версию ответа по-прежнему можно использовать (она актуальна).

Спецификации

Спецификация
Семантика HTTP>
# field.etag>

Совместимость с браузерами

Настольные Мобильные
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android WebView на iOS
ETag 1 12 1 15 1 18 4 14 1 1.0 4.4 1

См. также

  • Заголовки If-Match, If-None-Match
  • Коды состояния ответа 304 Not Modified, 412 Precondition Failed
  • Примечание W3C: редактирование веб-страниц — обнаружение проблемы потерянного обновления с помощью незарезервированной проверки

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/ETag

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API