阻止WordPress发送缓存控制http标头

时间:2014-10-31 作者:pixeline

我的站点位于一个使用Varnish作为(强大的)缓存引擎的服务器上。不幸的是,wordpress似乎正在通过发送缓存控制http头破坏Varnish缓存。如果我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: 相同的结果关于问题的原因,您还有其他想法吗?

2 个回复
最合适的回答,由SO网友:pixeline 整理而成

感谢@chrisguitarguy的回答,您可以通过“send\\u headers”挂钩控制Wordpress发送的http头。这是我添加到主题函数中的函数。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\' );

SO网友:chrisguitarguy

你可以加入wp_headers 并删除缓存控制标头。WordPress通常不发送Cache-Control 但是,除了管理区域或ajax请求之外。

add_filter(\'wp_headers\', \'wpse167128_nocache\');
function wpse167128_nocache($headers)
{
    unset($headers[\'Cache-Control\']);
    return $headers;
}

结束