HTTP ETag
ETag або entity tag — частина HTTP, протоколу World Wide Web. Є одним з декількох механізмів HTTP, який забезпечує валідацію кешу та дозволяє клієнту робити умовні запити. Це дозволяє збільшити ефективність кешу та економити пропускну здатність, оскільки веб-серверу не потрібно надсилати повну відповідь у разі, якщо контент не змінився. ETag може також використовуватись для оптимального керування багатопотоковістю[1], як способу запобігти тому, що одночасні оновлення перезаписують одні одних.
HTTP |
---|
|
Методи |
Список заголовків |
Коди стану |
ETag — закритий ідентифікатор, присвоєний веб-сервером на певну версію ресурсу, розміщеного за деяким URL. Якщо вміст ресурсу для цього URL змінюється, присвоюється новий та інший ETag. Використання ETags таким способом схоже на використання відбитків пальців, їх можна швидко порівняти і визначити, чи є дві версії ресурсу однаковими.
Генерування ETag
Використання ETags в заголовку HTTP є необов'язковим (як і у випадку з деякими іншими полями заголовка HTTP 1.1). Метод генерування ETags ніколи не був визначений в специфікації HTTP.
Загальновживані методи генерування ETag включають в себе використання стійких до колізій геш-функцій контенту ресурсу, гешу мітки часу останньої модифікації, або просто номера ревізії.
Для уникнення використання застарілих даних з кешу, методи генерування ETags повинні гарантувати унікальність кожного ETag. Однак функцію генерування ETag можна вважати "придатною", якщо можна довести, що повторюваність ETags буде відбуватися "відносно рідко" у випадку, якщо це трапиться.
Відомо, що деякі більш ранні контрольні суми, що були слабкішими від CRC32 чи CRC64, страждають від проблеми геш-колізій. Через це їх не використовували в генеруванні ETag.
Сильна та слабка валідація
Механізм ETag підтримує як сильну валідацію, так і слабку валідацію. Вони відрізняються наявністю початкового "W/" в ідентифікаторі ETag, як наприклад:
"123456789" – Сильний валідатор ETag W/"123456789" – Слабкий валідатор ETag
ETag, який відповідає сильній валідації, вказує на побайтну ідентичність контенту двох версій ресурсу та на те, що всі інші поля об'єкта також є незмінними. Сильні ETags дозволяють кешувати та повторно збирати неповні відповіді.
ETag, який відповідає слабкій валідації, вказує лише на те, що ці дві версії є семантично еквівалентними, а це означає, що для практичних цілей вони взаємозамінні та можуть бути використані кешовані копії. Проте версії ресурсів не обов'язково побайтно ідентичні, і, отже, слабкі ETags не підходять для запитів байтного діапазону. Слабкі ETags можуть бути корисними для випадків, коли сильні ETags є непрактичними для генерування веб-сервером, як-от у випадку з динамічно генерованим контентом.
Відстеження за допомогою ETags
ETags можуть бути використані для відстеження унікальних користувачів[2], оскільки куки дедалі більше видаляються користувачами, які обізнані з конфіденційністю. У липні 2011 року Ашхан Солтані та команда дослідників університету Берклі повідомили, що на ряді вебсайтів, включаючи Hulu.com, використовувались ETags для цілей відстеження.[3]
Через те, що ETags кешуються браузером і повертаються з наступними запитами для одного і того ж ресурсу, сервер відстеження може просто повторити будь-який ETag, отриманий від браузера, щоб забезпечити те, що призначений ETag зберігається на невизначений термін (подібно до постійних куки). Додаткові заголовки кешування також можуть покращити збереження даних ETag.[4]
ETags можна стерти очищенням кешу веб-переглядача (залежить від браузера).
Примітки
- W3C Note. (10 травня 1999.). "Editing the Web – Detecting the Lost Update Problem Using Unreserved Checkout".
- "tracking without cookies". 17 лютого 2003.
- Ayenson, Mika; Wambach, Dietrich; Soltani, Ashkan; Good, Nathan; Hoofnagle, Chris (29 липня 2011). Flash Cookies and Privacy II: Now with HTML5 and ETag Respawning (ID 1898390). Процитовано 15 листопада 2017.
- Cookieless cookies (using ETags as cookies).
Посилання
- Apache HTTP Server Documentation – FileETag Directive
- Editing the Web: Detecting the Lost Update Problem Using Unreserved Checkout, W3C Note, 10 May 1999.
- Old SQUID Development projects – ETag support (completed in 2001)
- Using ETags to Reduce Bandwidth & Workload with Spring & Hibernate
- Live demo of zombie cookie using ETags