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

Susan Sarandon
Libérer: 2024-11-04 03:03:29
original
940 Les gens l'ont consulté

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>
    Copier après la connexion
  2. Définir l'expiration :

    <code class="php">header("Cache-Control: max-age=" . (60 * 60 * 24 * 30)); // Set cache expiration to 30 days</code>
    Copier après la connexion
  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>
    Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!