ETag
HTTP заголовок відповіді. Є ідентифікатором для поточної версії ресурсу. Він надає можливість створювати кеш більш ефективно, і запобігає перенапругам у системі, створюючи доступність простору інтернету. Щойно надійде відповідь що данні не змінювались, то нема потреби знову це завантажувати.
Якщо дані з цього URL змінились, ETag код має бути змінений. Отже Etags створюються для ідентифікації і відстежування ресурсів інтернету. Порівняння кожного з них надає можливість відстежувати які дані змінились і мають бути перезавантажені.
Тип заголовку | Заголовок відповіді |
---|---|
Прихований заголовок | Ні |
Синтаксис
ETag: W/"<etag_value>" ETag: "<etag_value>"
Вказники
W/
Optional'W/'
(чутливо до регістру) вказує виконати детальну перевірку. Детальна перевірка допустима, але рідше використовуєтся для порівняння. Строга валідація ідеально підходіть для порівняння, але має дуже складний алгорітм і шкодить ефективності. Для підвищення ефективності використовуютьсяEtag
значення двох копій одне й те самого ресурсу. Порівняння коротких фраз кодів, ніж порівнювати кожен байт файлу, є ефективна ідея.- "<etag_value>"
- Унікальний хеш код ресурсу. Це звичайні набір символів ASCII у подвійних лапках (приклад
"675af34563dc-tr34"
). В звичайному випадку це хеш дати останньої модіфікаії, або це может бути будь який код. Наприклад, MDN викорустовує хеш шістнадцятирічних символів контенту вікіпедії.
Приклади
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4" ETag: W/"0815"
Виникаючі повітряні колізії
За допомогою ETag
і з заголовком If-Match
, можливо натрапити на повітряні колізії.
Наприклад, коли редагується MDN, поточний вікі контент захешований у 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
, без тіла відповіді, то поточна версія є актуальна(fresh).
Стандарти
Specification | Title |
---|---|
RFC 7232, section 2.3: ETag | Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests |
Сумісність с оглядачами
BCD tables only load in the browser
The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
See also
If-Match
If-None-Match
304
Not Modified
412
Precondition Failed
-
W3C Note: Editing the Web – Detecting the Lost Update Problem Using Unreserved Checkout