max-age=0 отправленный браузерами несмотря на заголовки, измененные везде

У меня есть проблема заголовков/кэша в моей лампе [песни] веб-сайт.

Конфигурация:

[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">

Проблема:

  1. Загрузите страницу впервые (названный si.php здесь)
  2. Чистый access_log:

    [root@localhost httpd]# > access_log
    
  3. Нажмите 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"
    
  4. Наблюдайте заголовки 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...


Править:

Хорошо, как принятый ответ предполагает, решение к:

  1. не открываются, новый браузер (не мог бы получить от кэша),
  2. не нажатие f5
  3. не только нажав Enter в строке поиска

После того, как страницу посетили в первый раз в этом экземпляре браузера, любое последующее нормальное посещение будет от кэша:

enter image description here

0
задан 1 March 2016 в 23:14
1 ответ

Когда вы нажимаете F5 в браузере, вы инструктируете браузер запрашивать у сервера и всех прокси на пути новое содержимое. Заголовок запроса Cache-Control делает именно это. Он не добавляется во время нормальной навигации.

Кроме того, PHP не имеет возможности узнать, что ваш контент не изменился, особенно если он выполняет вызов базы данных. Он никогда не вернет 304 для запроса, если вы не добавите код, который заставляет его делать это при любых условиях. Причина, по которой вы устанавливаете заголовок ответа управления кешем , заключается в том, что браузер вообще не будет делать запрос , если ресурс находится в кеше.

Перестаньте нажимать F5, просмотрите обычно, и наблюдайте за трафиком с помощью Fiddler или аналогичного инструмента. Вы обнаружите, что когда вы посещаете свою страницу PHP, затем переходите в другое место, а затем возвращаетесь , не нажимая F5 , ваш браузер показывает вашу страницу PHP, даже не запрашивая ее с сервера. Вы меняете обычное поведение кеширования, нажав F5!

2
ответ дан 4 December 2019 в 13:49

Теги

Похожие вопросы