Maison > développement back-end > tutoriel php > 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
Libérer: 2024-11-04 03:03:29
original
1067 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!

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