Maison  >  Article  >  développement back-end  >  Comment puis-je exploiter efficacement les en-têtes HTTP pour la mise en cache avec PHP ?

Comment puis-je exploiter efficacement les en-têtes HTTP pour la mise en cache avec PHP ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-04 03:03:29941parcourir

How can I effectively leverage HTTP headers for caching with PHP?

Comprendre la mise en cache HTTP avec les en-têtes PHP

Q : Quels en-têtes HTTP sont essentiels pour une mise en cache efficace avec PHP ?

R : Lors de la mise en œuvre de la mise en cache HTTP pour un site Web, des en-têtes spécifiques jouent un rôle crucial en guidant les navigateurs sur la façon de gérer le contenu mis en cache. Les en-têtes essentiels incluent :

  • Vary : Cet en-tête spécifie que le contenu varie en fonction de paramètres tels que la langue ou l'agent utilisateur, garantissant que les navigateurs récupèrent la version mise en cache appropriée.
  • Dernière modification : Indique la dernière fois que le contenu a été modifié. Les navigateurs comparent cette valeur à l'en-tête If-Modified-Since dans les requêtes ultérieures pour déterminer si le contenu doit être actualisé.
  • ETag : Cet en-tête représente une balise d'entité ou une somme de contrôle du contenu. Les navigateurs comparent cette valeur à l'en-tête If-None-Match pour éviter de demander à nouveau du contenu inchangé.

Mise en œuvre :

  1. Définir la politique de cache :

    <code class="php">session_cache_limiter('private_no_expire'); // Allow caching but do not reveal cache expiry time</code>
  2. Définir l'expiration :

    <code class="php">header("Cache-Control: max-age=" . (60 * 60 * 24 * 30)); // Set cache expiration to 30 days</code>
  3. Gérer les en-têtes If-Modified-Since et If-None-Match :
    Comparez les valeurs de ces en-têtes aux en-têtes Last-Modified et ETag pour éviter les nouvelles demandes inutiles :

    <code class="php">$tsstring = gmdate('D, d M Y H:i:s ', $timestamp) . 'GMT';
    $etag = $language . $timestamp;
    
    $if_modified_since = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : false;
    $if_none_match = isset($_SERVER['HTTP_IF_NONE_MATCH']) ? $_SERVER['HTTP_IF_NONE_MATCH'] : false;
    
    if ((($if_none_match && $if_none_match == $etag) || (!$if_none_match)) &&
        ($if_modified_since && $if_modified_since == $tsstring))
    {
        header('HTTP/1.1 304 Not Modified');
        exit();
    }
    else
    {
        header("Last-Modified: $tsstring");
        header("ETag: \"{$etag}\"");
    }</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn