[Хд] logo

Кеширование с HTTP Etag

Etag (или entity tag) — один из механизмов кэширования в HTTP. По сути это идентификатор, который присваивается файлу сервером для последующей проверки. http etag

Когда клиент запрашивает файлы веб-страницы (картинки, CSS и т.д), сервер передает все данные вместе с тэгами Etag в виде:

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
ETag: "6d82cbb050ddc7fa9cbb659014546e59"
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:

GET /news/latest.html HTTP/1.1
If-None-Match: "6d82cbb050ddc7fa9cbb659014546e59"
Host: example.com

# Пример запроса с Etag

Сервер, в свою очередь, проверяет Etag, если он совпадает, то в ответ сервер отправляет код 304:

HTTP/1.1 304 Not Modified
Server: MyServer/2.1
Date: Tue, 07 Jun 2016 09:00:00 GMT
ETag: "6d82cbb050ddc7fa9cbb659014546e59"
Content-Length: 0

# Указывает, что файлы не изменились и их можно взять с кэша

Иначе требуемые файлы будут заново отправлены.

Включение Etag

Все современные веб-браузеры и веб-серверы поддерживают HTTP Etag. Для включения функции в Nginx нужно отредактировать его файл конфигурации:

server {
...
	location ~* ^.+\.(rss|atom|jpg|jpeg|gif|png|ico|rtf|js|css)$ {
		expires 2592000;
etag on;
	}
...
}

# Etag включается для статических файлов

Самое главное

HTTP Etag позволяет увеличить отзывчивость веб-приложения и уменьшить нагрузку на канал. Функция поддерживается всеми современными веб-браузерами и не требует дополнительной настройки после включения.

  read in english
[Хд]

Подписывайтесь на отборные материалы по продвинутой разработке

Google Email

Esc, чтобы подписаться позже