MikeCN писал(а):
...кэш полной страницы сохраняется, а обновляем только нужные нам вещи.
Эммммм... В 21-ом веке вроде происходит так:
Самый первый запрос (с пустым кэшем браузера)
Код:
connect to urshop.ru 80...
> GET / HTTP/1.1
> Host: urshop.com
HTTP/1.1 200 OK
Date: xxxxxxxxxxxx
Cache-Control: max-age=0
Expires: xxxxxxxxxxxx
Last-Modified: xxxxxxxxxxxx
Content-Type: text/html
> GET /style.css HTTP/1.1
> Host: urshop.com
HTTP/1.1 200 OK
Date: xxxxxxxxxxxx
Cache-Control: max-age=YYY, must-revalidate
Expires: zzzzzzzzzzzz
Last-Modified: mmmmmmmmmmmm
Content-Type: text/css
Для динамики сервак отвечает что URI прям свежий и кэшировать его не надо (max-age=0)
А вот при запросе статики, он выставляет уже реальный Last-Modified, взятый из файловой системы и подставляет Expires из ExpiresDefault mod_expires.c
Соответственно, второе открытие страницы (с полным кэшем):
Код:
connect to urshop.ru 80...
> GET / HTTP/1.1
> Host: urshop.com
HTTP/1.1 200 OK
Date: xxxxxxxxxxxx
Cache-Control: max-age=0
Expires: xxxxxxxxxxxx
Last-Modified: xxxxxxxxxxxx
Content-Type: text/html
> GET /style.css HTTP/1.1
> Host: urshop.com
> If-Modified-Since mmmmmmmmmmmm
HTTP/1.1 304 Not Modified
Тут морда перезагрузилась ибо было сказано не кэшировать, а вот стили взялись из кэша, поскольку в кэше лежит версия от mmmmmmmmmmmm, и сервер сказал нам 304 Not Modified.
Но когда вы поменяете на серваке /style.css, и дата файла изменится с mmmmmmmmmmmm на wwwwwwwwwwwwww
Сетевой обмен уже пойдет так:
Код:
> GET /style.css HTTP/1.1
> Host: urshop.com
> If-Modified-Since mmmmmmmmmmmm
HTTP/1.1 200 OK
Date: wwwwwwwwwwwwww
Cache-Control: max-age=YYY, must-revalidate
Expires: zzzzzzzzzzzz
Last-Modified: wwwwwwwwwwwwww
Content-Type: text/css
Т.е. браузер запросит стили у сервака, отметив, что у него в кеше есть этот файл от mmmmmmmmmmmm, а вот сервак, увидив что времена не совпадают отдаст содержимое браузеру с указанием, что нужно обновить кэш новым содержимом и хранить столько-то дней.
Костыль с добавлением ?v=123 конечно же проверенное временем решение, но это действительно костыль из прошлого века, который может пригодиться лишь тем, кто не представляет себе протокол http1.1 и mod_expires