web-dev-qa-db-fra.com

Empêcher Wordpress d'envoyer un en-tête http Cache-control

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é:

  • désactiver tous les plugins. Videz le cache Varnish, puis curl -I: même résultat.
  • regardé à travers tous mes fichiers de thème. Rien de suspect.

Avez-vous une autre idée de ce qui peut causer le problème?

7
pixeline

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' );
6
pixeline

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;
}
1
chrisguitarguy