Начал серьезно интересоваться клиентской оптимизацией и натолкнулся на ситуацию с кешированием, которую я не в силах понять.
Итак, HTTP заголовок Expires.
Значение этого заголовка говорит о том, начиная с какой даты и времени документ можно считать просроченным, т.е. когда его нужно снова запрашивать у сервера или удостоверяться в его актуальности.
// Найдено
тут, многие другие источники повторяют эту позицию.
Начал изучать свои сайты и столкнулся с тем, что вроде бы картинки находятся в локальном кеше и Expires установлен на пару месяцев, но Firebug и Fiddler показывают, что на них тратится время, а учитывая их большое количество (100+) и ограниченность количества потоков браузера — это время выливается в секунды. Ладно, думаю, посмотрю, как и что происходит на других, уважаемых сайтах… А там, оказывается всё так-же: запросы шлются, ответы получаются.
На главной хабра натолкнулся на такой вопиющий ужас:
Заголовки поближе:
Firebug — Net — Waiting: 12.1 s
Что же это получается? Заголовок Expires установлен на несколько месяцев вперед, т. е., по хорошему, до истечения этого срока контент в локальном кеше можно бы считать валидным и не дергать его с сервера, но по факту браузер каждый раз ходит на сервер, чтобы получить ответ 304 Not Modified. Да, заголовок ответа крошечный, но количество ресурсов, да скорость соединения, да количество параллельных потоков из браузера к домену нивелируют эту крошечность и превращают время «бесполезных» запросов в секунды.
Возникает резонный вопрос: как? Почему? И что же делать?