HTTP ETag

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку


ETag або entity tag — частина HTTP, протоколу World Wide Web. Є одним з декількох механізмів HTTP, який забезпечує валідацію кешу та дозволяє клієнту робити умовні запити. Це дозволяє збільшити ефективність кешу та економити пропускну здатність, оскільки вебсерверу не потрібно надсилати повну відповідь у разі, якщо контент не змінився. ETag може також використовуватись для оптимального керування багатопотоковістю[1], як способу запобігти тому, що одночасні оновлення перезаписують одні одних.

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 [Архівовано 2 серпня 2018 у Wayback Machine.], використовувались ETags для цілей відстеження.[3]

Через те, що ETags кешуються браузером і повертаються з наступними запитами для одного і того ж ресурсу, сервер відстеження може просто повторити будь-який ETag, отриманий від браузера, щоб забезпечити те, що призначений ETag зберігається на невизначений термін (подібно до постійних куки). Додаткові заголовки кешування також можуть покращити збереження даних ETag.[4]

ETags можна стерти очищенням кешу вебпереглядача (залежить від браузера).

Примітки[ред. | ред. код]

  1. W3C Note. (10 травня 1999.). "Editing the Web – Detecting the Lost Update Problem Using Unreserved Checkout". Архів оригіналу за 3 червня 2013.
  2. "tracking without cookies". 17 лютого 2003. Архів оригіналу за 3 червня 2013.
  3. 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.
  4. Cookieless cookies (using ETags as cookies). Архів оригіналу за 27 серпня 2013.

Посилання[ред. | ред. код]