Несогласованный кеш и заголовки с истекающим сроком действия (pragma: nocache)

Я пытался заставить свой сервер Apache (v2.4.7) отвечать на заголовок If-Modified-Since, отправленный браузерами и пауками, такими как Google. Я нашел это по рекомендации Google Webmaster. Я не знал об этом до вчерашнего дня и не знал, что Apache не отвечает на этот заголовок и, следовательно, не отправляет обратно заголовок Last-Modified браузеру или пауку.

Я также заметил, что каждый запрос с моего сервера отправлял обратно pragma: nocache

После долгого чтения и возни я действительно заставил его работать на моем основном сайте.

Это произошло только после того, как я обнаружил, что параметр в php.ini для php-fpm называется session.cache_limiter, для которого установлено значение nocache, поэтому я установил его на session.cache_limiter = public

Перезагрузил сервер и вуаля, этот сайт был давали правильные заголовки и передавали его различным тестерам заголовков If-Modified-Since.

Теперь проблема .... на всех остальных 15 моих сайтах wordpress они все еще отправляют заголовок pragma: nocache и ни один из других заголовков кеша которые отображаются на основном сайте.

Все сайты имеют одинаковую конфигурацию в своих файлах apache .conf Все сайты имеют одинаковую конфигурацию в их .htaccess 14 GMT

Если я посмотрю на отдельные ресурсы на странице, у них будет правильный Last-Modified

, как показывает мой style.css Last-Modified: Thu, 02 Jun 2016 09:41:24 GMT

] Таким образом, он дает ответы Last-Modified, но на верхнем уровне, т.е. сама страница имеет дату в далеком прошлом.

На веб-сайте, где он не отправляет заголовок Last-Modified, это действительно так, но он отправляет их только для ресурсов на странице, таких как css, jpg и т. д. и т. д., но НЕ для самой страницы.

Итак .... 1 проблема превращается в 2.

Где, черт возьми, это происходит и откуда эта дата?

Это ошибка Apache? Ошибка Wordpress?

Я даже отключал плагины на сайтах wordpress, не отправляя заголовок Last-Modified для страницы, но это не повлияло.

Я все еще думаю, что это происходит где-то внутри Apache или PHP.

1
задан 3 June 2016 в 10:08
1 ответ

Надеюсь, это поможет любому другому человеку, работающему с сайтами Wordpress на Apache, я нашел проблему, и это вообще не имеет никакого отношения к Apache.

Проблема в том, что Wordpress удаляет заголовки Etag, Last-Modified, Expires и Cache-Control со всех страниц и постов.

Но для тех, кто хочет иметь реальный контроль над тем, что может быть кэшировано, а не кэшировано, этот контроль просто удаляется.

Спасибо человеку, который написал такой плагин для Wordpress, и он просто работает из коробки. Его также можно настроить, добавив функции, фильтры и крючки в файл functions.php вашей темы.

Плагин можно получить из него: https://wordpress.org/plugins/add-headers/

Подробности и подробная документация для плагина находится по адресу:

http://www.codetrax.org/projects/wp-add-headers/wiki/Configuration. и http://www.codetrax.org/projects/wp-add-headers/wiki/Filter_and_Action_Hooks

Надеюсь, это спасет кого-нибудь еще от потери рассудка, как будто я чуть не подумал, что с Apache что-то происходит, в то время как не очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень.

Я знаю, наконец, снова имею полный контроль над своими заголовками, и с помощью крючков и фильтров этого плагина я могу настроить время кэширования, даже на отдельных страницах и особенно на таких вещах, как система корзины, которую я могу установить на нулевую секунду кэширования. Так просто :)

1
ответ дан 3 December 2019 в 23:45

Теги

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