web-dev-qa-db-ja.com

WordpressがCache-control httpヘッダーを送信しないようにする

私のサイトは(強力な)キャッシングエンジンとしてVarnishを使っているサーバー上にあります。残念ながら、wordpressはcache-control 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

私はこのサーバー上で他のワードプレスサイトをホストしていて、それはVarnishサーバーと正しく連携するので、問題がこの特定のインストールによって引き起こされると確信しています。これが私が試したものです:

  • すべてのプラグインを無効にします。空のワニスキャッシュ、そしてcurl -I:同じ結果。
  • 私のすべてのテーマファイルを調べました。疑わしいことは何もない。

問題を引き起こす可能性があるものに関して他に何か考えがありますか?

7
pixeline

@ chrisguitarguyの回答のおかげで、 "send_headers"フックを介してWordpressによって送信されるhttpヘッダを制御することができます。これが私のテーマの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' );
6
pixeline

wp_headersにフックしてキャッシュコントロールヘッダを削除することができます。ただし、WordPressは通常、管理領域またはajaxリクエストを除いてCache-Controlを送信しません。

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