У меня есть проблема заголовков/кэша в моей лампе [песни] веб-сайт.
Конфигурация:
[root@localhost httpd]# httpd -v
Server version: Apache/2.2.23 (Unix)
Server built: Nov 25 2012 15:03:00
[root@localhost httpd]# php -v
PHP 5.5.22 (cli) (built: Feb 20 2015 04:04:46)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies
with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2015, by Zend Technologies
php.ini:
session.cache_limiter = public
session.cache_expire = 535680
httpd.conf:
<IfModule mod_expires.c>
# enable expirations
ExpiresActive On
<FilesMatch "\.(php)$">
ExpiresDefault "access plus 1 month"
Header set Cache-Control "max-age=32140800, public"
Header unset ETag
Header unset Last-Modified
FileETag None
</FilesMatch>
</IfModule>
Метатеги:
<meta HTTP-EQUIV="cache-control" CONTENT="public, max-age=32140800">
Проблема:
Чистый access_log:
[root@localhost httpd]# > access_log
Нажмите F5 в Firefox/хроме:
[root@localhost httpd]# cat access_log
192.168.0.16 - user [25/Jun/2015:04:16:19 +0100] "GET /path/si.php HTTP/1.1" 200 642 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36"
Наблюдайте заголовки Http с живым http расширением Firefox заголовков:
http://192.168.0.249/path/si.php
GET /path/si.php HTTP/1.1
Host: 192.168.0.249
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Cookie: __utma=254085576.10126650.1407082841.1422764987.1429480306.10; __utmz=254085576.1407082841.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); PHPSESSID=1cuf6d8764vu2i2u1hin4pg665
Authorization: Basic cmVjZqR0ZTq1c2VyMQ==
Connection: keep-alive
Cache-Control: max-age=0
HTTP/1.1 200 OK
Date: Thu, 25 Jun 2015 03:18:04 GMT
Server: Apache
X-Powered-By: PHP/5.5.22
Expires: Fri, 01 Jul 2016 03:18:04 GMT
Cache-Control: max-age=32140800, public
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
Content-Length: 643
Keep-Alive: timeout=15, max=13
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8
С какой стати max-age=0 отправленный заголовок? Firefox и Chrome отображают обоих то же поведение. Это - дополнительные 170 мс, которые я в настоящее время не могу предоставлять.
То, что является еще более странным, является 200 кодами ответа HTTP. Я не изменяю страницу вообще, она должна по крайней мере возвратить 304...
Править:
Хорошо, как принятый ответ предполагает, решение к:
После того, как страницу посетили в первый раз в этом экземпляре браузера, любое последующее нормальное посещение будет от кэша:
Когда вы нажимаете F5 в браузере, вы инструктируете браузер запрашивать у сервера и всех прокси на пути новое содержимое. Заголовок запроса Cache-Control делает именно это. Он не добавляется во время нормальной навигации.
Кроме того, PHP не имеет возможности узнать, что ваш контент не изменился, особенно если он выполняет вызов базы данных. Он никогда не вернет 304 для запроса, если вы не добавите код, который заставляет его делать это при любых условиях. Причина, по которой вы устанавливаете заголовок ответа управления кешем , заключается в том, что браузер вообще не будет делать запрос , если ресурс находится в кеше.
Перестаньте нажимать F5, просмотрите обычно, и наблюдайте за трафиком с помощью Fiddler или аналогичного инструмента. Вы обнаружите, что когда вы посещаете свою страницу PHP, затем переходите в другое место, а затем возвращаетесь , не нажимая F5 , ваш браузер показывает вашу страницу PHP, даже не запрашивая ее с сервера. Вы меняете обычное поведение кеширования, нажав F5!