it-swarm.com.de

Verhindert, dass Wordpress den HTTP-Header der Cache-Steuerung sendet

Meine Site befindet sich auf einem Server, der Varnish als (leistungsstarke) Caching-Engine verwendet. Leider scheint WordPress den Varnish-Cache zu sprengen, indem es einen Cache-Control-HTTP-Header sendet. Wenn ich curl -I domain.com bekomme:

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

Ich habe andere WordPress-Sites auf diesem Server, die korrekt mit dem Varnish-Server zusammenarbeiten. Daher bin ich mir ziemlich sicher, dass das Problem durch diese spezielle Installation verursacht wird. Folgendes habe ich versucht:

  • deaktiviere alle Plugins. Cache für Lack leeren, dann curl -I: gleiches Ergebnis.
  • habe alle meine Themendateien durchgesehen. Nichts verdächtiges.

Haben Sie eine andere Idee, was das Problem verursachen könnte?

7
pixeline

Dank der Antwort von @ chrisguitarguy können Sie die von Wordpress gesendeten http-Header über den Hook "send_headers" steuern. Hier ist die Funktion, die ich zur Datei functions.php meines Themas hinzugefügt habe und die das Problem mit dem Varnish-Server behebt.

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

Sie können sich in wp_headers einhängen und die Cache-Steuerelement-Header entfernen. WordPress sendet im Allgemeinen keinen Cache-Control, außer für Administrations- oder Ajax-Anfragen.

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