PDA

Показать полную графическую версию : Apache 2.2: не работает (ExpiresByType text/html) для динамических страниц


CyraxZ
01-11-2015, 15:34
Apache 2.2 + Debian
В настройках Apache прописываю директивы кэширования (для надёжности - в самом конце главного конфигурационного файла /etc/apache2/apache2.conf, т.к. в самом файле подключается множество других конфигов).

- После изменения конфигов Apache всегда перезапускаю.
- Перед всеми (ExpiresByType ...), и (Header set Cache-Control ...) директива (ExpiresActive on) стоит (иначе бы Expires не устанавливались для css, js и картинок)
- Модули mod_headers и mod_expires подключены (иначе бы Expires не устанавливались для css, js и картинок)

Для css, js и картинок никаких проблем не возникает - работает и (ExpiresByType ...), и (Header set Cache-Control ...).

Но для динамических html (формируемых php-скриптами) имеют место следующие проблемы:

1) не работает директива (ExpiresByType text/html), например (последний пример - из официальной справки (http://httpd.apache.org/docs/2.2/mod/mod_expires.html)):
ExpiresByType text/html "access plus 30 minuts"
ExpiresByType text/html "access plus 6 months"
ExpiresByType text/html "access plus 1 month 15 days 2 hours"

2) Указание этих директив для text/html, равно как и не указание, приводит к тому, что отправляются следующие заголовки:
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Такие заголовки отправляются тогда, когда указывается директива ExpiresByType text/html "access 0 seconds". Но в конфиге указывается другое время (вполне конкретное).

3) Если в конфиге прописать:
<FilesMatch \.(html|htm|php)$>
Header set Cache-Control "max-age=3600"
</FilesMatch>то Expires по-прежнему соответствует нулевому времени, но наши заголовки при этом добавляются к (no-store, no-cache, must-revalidate, post-check=0, pre-check=0) (не перезаписывают, а именно добавляются):
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=3600
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Итог
Со статическими html-файлами никаких проблем не наблюдается. Специально проверил.
В то же время, во всех приведённых примерах в качестве момента отсчёта времени указывается не modification (в этом случае для динамических html кэширования бы не работало), а access.

Почему (ExpiresByType text/html) не работает с динамическим html ?

А вернее, как-то в фоновом режиме им пропиывается нулевое время. Да так, что даже Header set Cache-Control "max-age ..." не может этот header перезаписать (только добавляет, тогда как со статикой - перезаписывает).




© OSzone.net 2001-2012