Spec-Zone.ru › HTTP

ETag

ETag

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

Если ресурс по заданному URL меняется, новое значение Etag обязательно должно быть сгенерировано. Сравнение этих значений позволяет определить, являются ли две представленные версии ресурса одинаковыми.

Тип заголовка Заголовок ответа
Запрещённое имя заголовка нет

Синтаксис

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

Директивы

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

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

"<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 Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari на IOS Samsung Internet
ETag
Да
12
Да
Да
Да
Да
Да
Да
Да
Да
Да
Да

См. также

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

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

Spec-Zone.ru

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