Предотвращение отправки HTTP-заголовка Cache-control в WordPress
Мой сайт размещен на сервере, использующем Varnish в качестве (мощного) механизма кэширования.
К сожалению, похоже, что WordPress нарушает кэш Varnish, отправляя HTTP-заголовок cache-control. Когда я выполняю curl -I domain.com
, получаю:
HTTP/1.1 200 OK
Server: Apache/2.4.10
X-Powered-By: PHP/5.4.4-14+deb7u14
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=e00738aoughg407ljm270kj0l6; path=/
Content-Type: text/html; charset=UTF-8
Accept-Ranges: bytes
Date: Fri, 31 Oct 2014 21:44:16 GMT
Connection: keep-alive
Via: 1.1 varnish
Age: 0
У меня есть другие сайты WordPress, размещенные на этом сервере, которые корректно работают с сервером Varnish, поэтому я уверен, что проблема вызвана именно этой конкретной установкой. Вот что я попробовал:
- отключил все плагины. Очистил кэш Varnish, затем выполнил
curl -I
: результат тот же. - просмотрел все файлы темы. Ничего подозрительного не нашел.
Есть ли у вас другие идеи о том, что может вызывать эту проблему?
Благодаря ответу @chrisguitarguy, вы можете управлять HTTP-заголовками, отправляемыми WordPress, с помощью хука "send_headers". Вот функция, которую я добавил в файл functions.php своей темы, и она решила проблему с сервером Varnish.
function varnish_safe_http_headers() {
header( 'X-UA-Compatible: IE=edge,chrome=1' );
session_cache_limiter('');
header("Cache-Control: public, s-maxage=120");
if( !session_id() )
{
session_start();
}
}
add_action( 'send_headers', 'varnish_safe_http_headers' );

Вы можете подключиться к хуку wp_headers
и удалить заголовки управления кешем. Однако WordPress обычно не отправляет Cache-Control
, за исключением запросов в админ-панели или AJAX-запросов.
add_filter('wp_headers', 'wpse167128_nocache');
function wpse167128_nocache($headers)
{
unset($headers['Cache-Control']);
return $headers;
}

Отлично. Вы знаете, будет ли это переопределять любые дальнейшие изменения HTTP-заголовков сторонними плагинами?

На самом деле, правильный хук - это "send_headers". Опубликую окончательное решение в виде ответа.

@pixeline wp_headers и send_headers - оба являются валидными хуками...исходный вопрос выглядит как валидный случай использования wp_headers. Смотрите https://developer.wordpress.org/reference/hooks/wp_headers/.
