Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программное обеспечение Linux и FreeBSD (http://forum.oszone.net/forumdisplay.php?f=11)
-   -   Apache 2.2: не работает (ExpiresByType text/html) для динамических страниц (http://forum.oszone.net/showthread.php?t=307394)

CyraxZ 01-11-2015 15:34 2570408

Apache 2.2: не работает (ExpiresByType text/html) для динамических страниц
 
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), например (последний пример - из официальной справки):
Код:

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 перезаписать (только добавляет, тогда как со статикой - перезаписывает).


Время: 18:26.

Время: 18:26.
© OSzone.net 2001-