Заголовки: 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 |
См. также
© 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