пятница, 1 ноября 2013 г.

Браузерный кеш

Жесткое кеширование (200 cache)





Для жесткого кеширования  достаточно добавить заголовки Expires и Cache-Control: max-age.

Для статических компонентов применяется часто правило "без срока давности", устанавливая заголовок Expires (срок жизни кеша) далеко вперед.

Или же наоборот если мы не хотим кешировать страницу то стоит установить в Expires прошедшую дату.


Для динамических компонентов используется соответствующий метатег управления кешированием (Cache-Control), чтобы браузер знал с какой периодичностью проверять содержимое страницы.

Есть еще один мета-тэг Pragma: no-cache довольно хорошо поддерживаемое соглашение, которому следует большинство web-браузеров. Обнаружив этот тэг, они обычно не кэшируют страницу (хотя никаких гарантий нет, это всего лишь соглашение).


Получив такие заголовки, браузер жестко закеширует документ надолго. Все дальнейшие обращения к документу будут напрямую обслуживаться из кеша браузера, без обращения к серверу. Это самый быстрый способ, потому что никакого запроса на веб-сервере не выполняется.

Простое кеширование - HTTP Last-Modified, ETag (304)


Большинство серверов автоматически прописывают этот заголовок при отдаче статических ресурсов. Это позволяет браузеру закачивать новое содержимое только в том случае, если файл реально был изменен. Для этого вместе с запросом GET браузер шлет заголовок:

If-Modified-Since: data,time

Сервер отвечает кодом статуса 304 (not modified/not match) и загружает страницу из кеша в следующих случаях:
  • Если браузер послал заголовок "If-Modified-Since: date", в котором date больше либо равна значению заголовка ответа "Last-Modified: date". Т.е. клиент спрашивает: "Есть ли новая версия с момента date? Если нет, верни мне 304 и сэкономь трафик. Если есть, отдай мне тело страницы".
  • Если браузер послал заголовок "If-None-Match: hash", где hash совпадает со значением заголовка ответа "ETag: hash". Т.е. клиент спрашивает: "Отличается ли текущая версия страницы от той, что я запросил в прошлый раз? Если нет, верни мне 304 и сэкономь трафик. Если да, отдай тело страницы".
Отличие в том что в etag нет привязки ко времени и в хеше мы можем передавать все что угодно. 
Срок жизни браузерного кеша - сессия (до тех пор пока браузер не перезапустить)




304 это не так быстро, как 200 (cache), тк запрос все равно передается на веб-сервер, но сервер не должен отправить содержимое файла.



Комментариев нет:

Отправить комментарий