Thank you for reading this post, don't forget to subscribe!
Etag (или entity tag) — один из механизмов кэширования в HTTP. По сути это идентификатор, который присваивается файлу сервером для последующей проверки.
Когда клиент запрашивает файлы веб-страницы (картинки, CSS и т.д), сервер передает все данные вместе с тэгами Etag в виде:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
HTTP/1.1 200 OK Server: MyServer/2.1 Date: Thu, 09 Jun 2016 13:30:54 GMT Content-Type: text/html Accept-Ranges: bytes Last-Modified: Tue, 07 Jun 2016 12:00:00 GMT <b>ETag: "6d82cbb050ddc7fa9cbb659014546e59"</b> Content-Length: 363 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> ... </html> |
# Пример ответа сервера с Etag
Файлы сохраняются в кэше на стороне клиента, и когда браузер запрашивает эти файлы снова, то к запросу добавляется строка If-None-Match:
1 2 3 |
GET /news/latest.html HTTP/1.1 <b>If-None-Match: "6d82cbb050ddc7fa9cbb659014546e59"</b> Host: example.com |
# Пример запроса с Etag
Сервер, в свою очередь, проверяет Etag, если он совпадает, то в ответ сервер отправляет код 304:
1 2 3 4 5 |
<b>HTTP/1.1 304 Not Modified</b> Server: MyServer/2.1 Date: Tue, 07 Jun 2016 09:00:00 GMT ETag: "6d82cbb050ddc7fa9cbb659014546e59" Content-Length: 0 |
# Указывает, что файлы не изменились и их можно взять с кэша
Иначе требуемые файлы будут заново отправлены.
Включение Etag
Все современные веб-браузеры и веб-серверы поддерживают HTTP Etag. Для включения функции в Nginx нужно отредактировать его файл конфигурации:
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 |
server { ... location ~* ^.+\.(rss|atom|jpg|jpeg|gif|png|ico|rtf|js|css)$ { expires 2592000; etag on; } ... } |
[/codesyntax]
# Etag включается для статических файлов
Самое главное
HTTP Etag позволяет увеличить отзывчивость веб-приложения и уменьшить нагрузку на канал. Функция поддерживается всеми современными веб-браузерами и не требует дополнительной настройки после включения.