ETag

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 (en-US) Precondition Failed буде повернено.

Кеш статичних ресурсів

Інший випадок використання ETag заголовку це кешування ресурсів які не змінювались. Якщо користувач робить запит якоїсь URL знову (вже встановлений ETag), і якщо контент є застарілим, він може буть непрацюючим. Користувач виконує запит з встановленим ETag із заголовком If-None-Match (en-US):

If-None-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"

Сервер порівнює клієнтську версію коду ETag (відправлений з If-None-Match) з версією ETag для поточної версії ресурсу і якщо обидва сходяться то змін не було, сервер поверне відповідь 304 (en-US) 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

See also