Maison >développement back-end >tutoriel php >Comment utiliser Apache mod_expires et mod_headers pour implémenter la mise en cache des fichiers et la sortie compressée mod_deflate

Comment utiliser Apache mod_expires et mod_headers pour implémenter la mise en cache des fichiers et la sortie compressée mod_deflate

jacklove
jackloveoriginal
2018-06-11 10:16:312334parcourir

1. Utilisez le module mod_deflate pour compresser la sortie (démarrez gzip)

Activez mod_deflate

sudo a2enmod deflate
sudo /etc/init.d/apache2 restart

Ajouter

<IfModule mod_deflate.c>
#单独设置需要压缩的类型
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css
AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>

à httpd.conf Par défaut, toutes les sorties doivent être compressées, et seules certaines le sont. exclu.

<IfModule mod_deflate.c>
SetOutputFilter DEFLATE #插入过滤器,gzip所有输出
#设置不压缩的类型
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:pdf|doc)$ no-gzip dont-vary
</IfModule>

2. Utilisez Apache mod_expires et mod_headers pour implémenter la mise en cache des fichiers


Activer mod_expires et mod_headers

sudo a2enmod expires
sudo a2enmod headers
sudo /etc/init.d/apache2 restart

prennent avantage de mod_expires , ajoutez

<IfModule mod_expires.c>
ExpiresActive on #开启
ExpiresDefault A300 #默认
ExpiresByType text/html A300
ExpiresByType text/css A2592000 # 30天
ExpiresByType image/gif A2592000
ExpiresByType image/jpeg A2592000
ExpiresByType application/x-javascript A2592000
</IfModule>

à httpd.conf en utilisant mod_headers, ajoutez

<IfModule mod_headers.c>
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
<FilesMatch "\.(xml|txt)$">
Header set Cache-Control "max-age=18000, public, must-revalidate"
</FilesMatch>
<FilesMatch "\.(html|htm|php)$">
Header set Cache-Control "max-age=3600, must-revalidate"
</FilesMatch>
</IfModule>

3. Description du Cache-Control :


Le cache des pages web est déterminé par le "Cache-control " dans l'en-tête du message HTTP "Pour contrôler, les valeurs communes incluent private, no-cache, max-age, must-revalidate, etc. La valeur par défaut est private. Sa fonction est répartie dans les situations suivantes selon différentes méthodes de re-navigation :


(1) Ouvrir une nouvelle fenêtre
Si la valeur est privée, sans cache, doit être revalidée, alors le serveur sera à nouveau accessible lorsqu'une nouvelle fenêtre sera ouverte.
Et si la valeur max-age est spécifiée, le serveur ne sera plus accessible dans cette valeur, par exemple :
Cache-control : max-age=5 (indique 5 secondes après avoir accédé à cette page Web Accéder à nouveau en quelques secondes, il n'ira pas au serveur)
(2) Appuyez sur Entrée dans la barre d'adresse
Si la valeur est privée ou doit être revalidée, le serveur ne sera accessible que la première fois et ne sera plus accessible.
Si la valeur est sans cache, elle sera accessible à chaque fois.
Si la valeur est max-age, elle ne sera plus accessible avant l'expiration.
(3) Appuyez sur le bouton retour
Si la valeur est privée, doit être revalidée, âge maximum, elle ne sera plus accessible. Si la valeur de
est sans cache, elle sera accessible. à plusieurs reprises à chaque fois
( 4) Appuyez sur le bouton d'actualisation
Quelle que soit la valeur, elle sera accessible à plusieurs reprises

Cache-Control (en-tête régulier, HTTP1.1 )
.public : (En-tête de réponse uniquement)
Réponse : Informez les cacheurs de tout canal que la réponse peut être mise en cache sans condition
.privé (uniquement pour l'en-tête de réponse)
Réponse : Informer le cacher (pour autant que je sache, il fait référence à l'agent utilisateur, le cache local des navigateurs courants. L'utilisateur fait également référence à l'utilisateur système . Mais il ne faut peut-être pas exclure que certaines passerelles puissent identifier chaque utilisateur final), mettre en cache uniquement la réponse pour un seul utilisateur et vous pouvez spécifier un certain champ, par exemple, privé - "nom d'utilisateur", le contenu de l'en-tête nommé nom d'utilisateur. dans l'en-tête de réponse ne sera pas partagé et mis en cache.
. Transmettez ma demande et vérifiez votre cache (le cas échéant). Nom correspondant : rechargement de bout en bout. Réponse : Autoriser les caches à mettre en cache les copies. la valeur réelle est de toujours forcer les cacheurs à vérifier la fraîcheur du cache. Une fois la fraîcheur confirmée, la copie mise en cache peut être utilisée comme réponse, vous pouvez également spécifier un champ inclus, comme une application typique, non. -cache=Set-Cookie. Le résultat est d'informer Cache, pour le champ Set-Cookie, vous ne devez pas utiliser le contenu mis en cache, mais utiliser le nouveau. .no-store
 :
Demande : il est interdit de mettre en cache les informations, les demandes et les réponses (peut-être pour des raisons de confidentialité)
Réponse : comme ci-dessus.max-age<.> : Demande : forcer la réponse à cacher, en fonction de cette valeur, vérifier la fraîcheur, c'est-à-dire la comparer avec sa propre valeur d'âge et le temps de la demande. S'il dépasse la valeur d'âge maximum, il est obligé d'accéder à. le serveur pour vérifier qu'une nouvelle réponse est renvoyée. Sa fonction est essentiellement similaire à celle d'Expires traditionnelle, mais la différence est que Expires est comparé en fonction d'une valeur de date spécifique. Une fois que l'heure du cache est inexacte, le résultat peut être erroné. . Max-age n'a évidemment pas ce problème. Max-age a également une priorité plus élevée que Expires.
Réponse : similaire à ce qui précède, sauf que l'expéditeur est différent.
.
max-stale<.> : Requête : ce qui signifie que j'autorise le cache à en envoyer un, et il n'expirera pas le cache plus ancien que les secondes spécifiées Réponse : Idem que ci-dessus
.
doit être revalidé (en-tête de réponse uniquement)
Réponse : Cela signifie que si le cache est une nouvelle période, vous devez revérifier au lieu d'essayer de renvoyer un cache qui n'est pas dans la nouvelle période. La différence avec no-cache est que non-. Le cache ignore complètement le concept de période fraîche et force toujours la revalidation. En théorie, la revalidation obligatoire économise davantage de trafic, mais par rapport à l'absence de cache, elle n'est peut-être pas toujours aussi précise, car même si le cacher pense qu'il est frais. , il n'y a aucune garantie que le serveur n'a pas été mis à jour. Si le cacher est un serveur proxy de mise en cache, s'il tente de revérifier, si le serveur d'origine ne peut pas être connecté, une copie obsolète et mise en cache n'est pas autorisée à être renvoyée. Au lieu de cela, un délai d'attente de passerelle 504..proxy-revalidate
(uniquement en-tête de réponse)
Réponse : la restriction est similaire à must-revalidate. La différence réside dans la portée du proxy accepteur. revalidate consiste à exclure le cache de l'agent utilisateur. Autrement dit, ses règles ne s'appliquent pas au cache On local de l'agent utilisateur.
.min-fresh(en-tête de demande uniquement)
Requête : Informez le cache que si l'heure actuelle plus la valeur de min-fresh dépasse le délai d'expiration du cache, un nouveau me sera attribué. En fait, j'ai personnellement l'impression que sa fonction est quelque peu similaire à max-age. . Mais c'est plus grand. La différence est sémantique
.only-if-cached : (uniquement l'en-tête de la requête)
Requête : Dites au cacher que je veux que le contenu provienne du. cache, et je me fiche d'être mis en cache. Réponse du cache, qu'elle soit fraîche
.s-maxage (en-tête de réponse uniquement)
Réponse : la seule différence avec max-age. est que s-maxage s'applique uniquement au cache partagé et ne fait pas référence au cache local de l'agent utilisateur, comme le cache d'un seul utilisateur. De plus, s-maxage a une priorité plus élevée que max-age..cache. -extension (cache-extension est un nom général. Il fait référence à toutes les instructions personnalisées ou étendues, le client et le serveur peuvent personnaliser et étendre les instructions liées à Cache-Control.) Ensuite, en fait, nous pouvons faire cela Cache- Contrôle : âge maximum = 300, directive personnalisée = xxx, public. De cette façon, nous définissons une directive d'extension appelée collectivement cache-extension Si le client ou le serveur correspondant ne reconnaît pas cette directive, elle sera ignorée
.no-transform
. Requête : dites à l'agent de ne pas modifier le type de média, tel que jpg, vous l'avez modifié en png
Réponse : Idem que ci-dessus.

Cet article explique comment utiliser Apache. mod_expires et mod_headers Implémentent la mise en cache des fichiers et la sortie compressée mod_deflate Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois.

Recommandations associées :
Introduction à l'API d'historique HTML5

À propos du bullage, de l'insertion de dichotomie et de l'algorithme de tri rapide Introduction

Explique le contenu connexe de la classe de téléchargement de fichiers PHP qui prend en charge le transfert de reprise de point d'arrêt

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