Mon site se trouve sur un serveur qui utilise Varnish en tant que moteur de mise en cache (puissant). Malheureusement, Wordpress semble décomposer le cache de Varnish en envoyant un en-tête http de contrôle du cache. Si je curl -I domain.com
je reçois:
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
J'ai d'autres sites wordpress hébergés sur ce serveur, qui fonctionnent correctement avec le serveur Varnish. Je suis donc presque certain que le problème provient de cette installation spécifique. Voici ce que j'ai essayé:
curl -I
: même résultat.Avez-vous une autre idée de ce qui peut causer le problème?
Grâce à @ chrisguitarguy, vous pouvez contrôler les en-têtes HTTP envoyés par Wordpress via le hook "send_headers". Voici la fonction que j'ai ajoutée au fichier functions.php de mon thème et qui a résolu le problème avec le serveur 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' );
Vous pouvez vous connecter à wp_headers
et supprimer les en-têtes de contrôle du cache. WordPress n'envoie généralement pas Cache-Control
, sauf pour les requêtes admin ou ajax, cependant.
add_filter('wp_headers', 'wpse167128_nocache');
function wpse167128_nocache($headers)
{
unset($headers['Cache-Control']);
return $headers;
}