Что такое HTTP ETag?
ETag:
Тег объекта (ETag) - это HTTP-заголовок, используемый для проверки веб-кеша и условного запроса от браузеров к ресурсам. Значение ETag - это идентификатор, представляющий конкретную версию ресурса. Кроме того, ETags предотвращает перезапись одновременных обновлений ресурса друг с другом. Пример заголовка ETag:
ETag: "версия1"
Примечание . Значение заголовка ETag должно быть заключено в двойные кавычки.
Работа ETag
- Сервер получает HTTP-запрос для определенного ресурса.
- Сервер генерирует ответ и прикрепляет заголовок ETag. Например: ETag: «response_version1».
- Сервер отправляет ответ с указанным выше заголовком с кодом состояния 200 . Затем приложение представляет ресурс и в то же время кэширует копию ресурса вместе с информацией заголовка.
- Позже это же приложение делает еще один запрос для того же ресурса со следующим условным заголовком запроса: If-None-Match: «response_version1»
- При получении запроса ресурса вместе с заголовком If-None-Match логика на стороне сервера сравнивает текущее значение идентификатора ETag на стороне сервера и значение, полученное в заголовке запроса.
- Если If-None-Match запроса совпадает с текущим сгенерированным значением ETag на сервере, то код состояния 304 (Not Modified) с пустым телом отправляется обратно, и приложение использует кэшированную копию ресурса.
- Если значение запроса If-None-Match не соответствует текущему сгенерированному / назначенному значению ETag (скажем, «response_version2») для того же ресурса, то сервер отправляет обратно новый контент в теле вместе с кодом состояния 200 . Заголовок ETag с новым значением также включается в ответ. Приложение использует новый ресурс и обновляет свой кэш новыми данными.
Создание значения ETag
Это полностью зависит от приложения, которое может сгенерировать его по своему усмотрению. Его можно создавать и обновлять вручную или автоматически. Общие методы его автогенерации включают использование хэша содержимого ресурса или просто хэша отметки времени последней модификации. Сгенерированный хеш не должен иметь коллизий.
Проверка значения ETag
Это просто сравнение двух значений. Он разделен на 2 части.
- Сильная проверка
- Слабая проверка
1. сильная проверка:
Представления различных ресурсов побайтно идентичны. Это проверка ETag по умолчанию, и для нее не используется никаких специальных директив.
2. Слабая проверка:
Два представления ресурсов семантически эквивалентны. Например, текущая дата, отображаемая на странице, может не иметь значения для обновления всего ресурса для нее.
Использованная литература:
- https://en.wikipedia.org/wiki/HTTP_ETag
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag
Вниманию читателя! Не переставай учиться сейчас. Ознакомьтесь со всеми важными концепциями теории CS для собеседований по SDE с помощью курса теории CS по доступной для студентов цене и будьте готовы к работе в отрасли.