Maison  >  Article  >  développement back-end  >  Comment puis-je implémenter efficacement la mise en cache HTTP avec PHP pour les sites Web dynamiques au contenu statique ?

Comment puis-je implémenter efficacement la mise en cache HTTP avec PHP pour les sites Web dynamiques au contenu statique ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-04 09:35:01732parcourir

How can I effectively implement HTTP caching with PHP for dynamic websites with static content?

Intégration de la mise en cache HTTP avec PHP

Dans les situations où le contenu de la page reste principalement statique mais entouré d'un modèle dynamique, l'exploitation des en-têtes de cache HTTP peut optimiser livraison des pages. Voici un guide simplifié pour mettre en œuvre une mise en cache efficace à l'aide de PHP :

En-têtes essentiels pour la mise en cache

Pour activer la mise en cache, pensez à envoyer les en-têtes suivants :

  • Content-Type : Spécifiez le type MIME et le jeu de caractères de la réponse.
  • Vary : Accept : Indiquez que la réponse peut varier en fonction de l'acceptation du client en-tête, contrôlant la négociation de contenu.
  • Cache-Control : Définissez des directives telles que private_no_expire pour autoriser la mise en cache privée mais empêcher la revalidation. Vous pouvez également utiliser public pour autoriser la mise en cache partagée.
  • Dernière modification : Indiquez la date et l'heure de la dernière modification du contenu.
  • ETag : Attribuez un identifiant unique au contenu, que les clients peuvent utiliser pour déterminer si la version mise en cache est toujours à jour.

Demandes et traitement conditionnels

Traiter les demandes conditionnelles entrantes en utilisant if-modified-since et if-none-match:

  • if-modified-since : Comparez l'en-tête de la requête avec l'en-tête Last-Modified. Si la version mise en cache est toujours valide, renvoyez un code d'état 304 (Non modifié).
  • if-none-match : Validez par rapport à l'en-tête ETag. Si la version mise en cache correspond, renvoyez un 304.

Détermination de la validité du cache

Lors de la génération de l'ETag, envisagez d'utiliser une somme de contrôle ou une combinaison de facteurs tels que l'utilisateur ID, langue et horodatage. Pour un contenu statique plus durable, définissez une expiration plus longue.

Exemple de mise en œuvre

<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 &amp;&amp; $if_none_match == $etag) || (!$if_none_match)) &amp;&amp; 
($if_modified_since &amp;&amp; $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