Может ли браузер отображать изображения (или некоторые другие объекты) из своего кэша без получения кода состояния 304?

Я пытаюсь понять, можно ли избежать запроса некоторых встроенных объектов, загружая их непосредственно из кэша, не спрашивая веб-сервер, действителен ли объект или нет (я не отвечаю на запрос веб-сервера со статусом 304 http код) это возможно? Работает ли заголовок expire для этого способа? Как?


Из моего htaccess.

    # cache images/pdf docs for 10 days
    <FilesMatch "\.(ico|pdf|jpg|jpeg|png|gif|js)$">

      Header set Expires "Mon, 31 Dec 2035 12:00:00 gmt"

    </FilesMatch>

    # cache html/htm/xml/txt diles for 2 days
    <FilesMatch "\.(html|htm|xml|txt|xsl)$">
      Header set Cache-Control "max-age=7200"
    </FilesMatch>

</IfModule>

Аналогичная операция с функцией заголовка php, а также в httpd.conf.

Я проверяю результаты в apache access.log. Каждый раз, когда я обновляю страницу в файле access.log, появляется запрос 304. Итак, я думаю, что браузер всегда делает запрос.

1 ответ

Да, вы должны использовать Expires или же Cache-Control: max-age заголовки, чтобы браузер не запрашивал объекты снова. См. RFC 2616 для деталей.

HTTP-кэширование работает лучше всего, когда кэши могут полностью избежать запросов к исходному серверу. Основной механизм, позволяющий избежать запросов, заключается в том, что исходный сервер должен предоставлять явное время истечения в будущем, указывая, что ответ МОЖЕТ использоваться для удовлетворения последующих запросов. Другими словами, кеш может вернуть новый ответ без предварительного обращения к серверу.

Другие вопросы по тегам