web-dev-qa-db-fra.com

Comment définir les en-têtes HTTP (pour le contrôle du cache)?

Comment activer la mise en cache du navigateur pour mon site? Dois-je simplement mettre cache-control: public quelque part dans mon en-tête comme ceci?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
Cache-Control:public;
>

J'utilise la dernière version de PHP en développement sur la dernière version de XAMPP.

229
andrew

Pour utiliser le contrôle de cache en HTML, vous utilisez balise méta , par exemple.

<meta http-equiv="Cache-control" content="public">

La valeur dans le champ de contenu est définie comme l'une des quatre valeurs ci-dessous.

Quelques informations sur l'en-tête Cache-Control sont les suivantes

HTTP 1.1. Valeurs autorisées = PUBLIC | Privée | NO-CACHE | NO-STORE.

Public - peut être mis en cache dans des caches partagés publics.
Privé - ne peut être mis en cache que dans le cache privé.
No-Cache - ne peut pas être mis en cache.
No-Store - peut être mis en cache mais pas archivé.

La directive CACHE-CONTROL: NO-CACHE indique que les informations mises en cache ne doivent pas être utilisées et que les demandes doivent être transmises au serveur d'origine. Cette directive a la même sémantique que PRAGMA: NO-CACHE.

Les clients DOIVENT inclure PRAGMA: NO-CACHE et CACHE-CONTROL: NO-CACHE lorsqu'une demande no-cache est envoyée à un serveur inconnu. être conforme à HTTP/1.1. Voir aussi EXPIRES.

Remarque: Il peut être préférable de spécifier les commandes de cache dans HTTP plutôt que dans les instructions META, où elles peuvent influencer davantage que le navigateur, mais les mandataires et autres intermédiaires susceptibles de mettre en cache des informations.

189
Codemwnci

Vous pouvez définir les en-têtes en PHP en utilisant:

<?php
  //set headers to NOT cache a page
  header("Cache-Control: no-cache, must-revalidate"); //HTTP 1.1
  header("Pragma: no-cache"); //HTTP 1.0
  header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past

  //or, if you DO want a file to cache, use:
  header("Cache-Control: max-age=2592000"); //30days (60sec * 60min * 24hours * 30days)

?>

Notez que les en-têtes exacts utilisés dépendront de vos besoins (et si vous devez prendre en charge HTTP 1. et/ou HTTP 1.1 )

127
scunliffe

Comme je l'ai écrit (dans http://www.williamferreira.net/blog/2011/10/04/controle-de-cache-Apache/ ), il est préférable d'utiliser le fichier .htacces. Cependant, méfiez-vous du temps que vous laissez le contenu dans le cache.

Utilisation:

<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>

Où: 604800 = 7 jours

PS: Ceci peut être utilisé pour réinitialiser n'importe quel en-tête

45
William

La page à http://www.askapache.com/htaccess/Apache-speed-cache-control.html suggère d'utiliser quelque chose comme ceci:

Ajouter des en-têtes de contrôle du cache

Cela va dans votre fichier .htaccess racine, mais si vous avez accès à httpd.conf c'est mieux.

Ce code utilise la directive FilesMatch et la directive Header pour ajouter des en-têtes Cache-Control à certains fichiers.

# 480 weeks
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=290304000, public"
</FilesMatch>
29
angry kiwi

C’est le meilleur .htaccess que j’ai utilisé sur mon site actuel:

<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>

##Tweaks##
Header set X-Frame-Options SAMEORIGIN

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>
## EXPIRES CACHING ##

<IfModule mod_headers.c>
    Header set Connection keep-alive
    <filesmatch "\.(ico|flv|gif|swf|eot|woff|otf|ttf|svg)$">
        Header set Cache-Control "max-age=2592000, public"
    </filesmatch>
    <filesmatch "\.(jpg|jpeg|png)$">
        Header set Cache-Control "max-age=1209600, public"
    </filesmatch>
    # css and js should use private for proxy caching https://developers.google.com/speed/docs/best-practices/caching#LeverageProxyCaching
    <filesmatch "\.(css)$">
        Header set Cache-Control "max-age=31536000, private"
    </filesmatch>
    <filesmatch "\.(js)$">
        Header set Cache-Control "max-age=1209600, private"
    </filesmatch>
    <filesMatch "\.(x?html?|php)$">
        Header set Cache-Control "max-age=600, private, must-revalidate"
      </filesMatch>
</IfModule>
17
Erich García

Pour le serveur Apache, vous devez vérifier mod_expires pour définir les en-têtes Expires et Cache-Control.

Sinon, vous pouvez utiliser la directive Header pour ajouter vous-même Cache-Control:

Header set Cache-Control "max-age=290304000, public"
13
Peter Štibraný

La balise de contrôle méta cache permet aux éditeurs Web de définir la manière dont les pages doivent être gérées par les caches. Elles incluent des directives permettant de déclarer ce qui devrait pouvoir être mis en cache, ce qui peut être stocké par les caches, les modifications du mécanisme d’expiration, ainsi que les contrôles de revalidation et de rechargement.

Les valeurs autorisées sont:

Public - peut être mis en cache dans des caches partagés publics
Private - peut uniquement être mis en cache dans un cache privé
no-Cache - ne peut pas être mis en cache
no-Store - peut être mis en cache mais pas archivé

S'il vous plaît soyez prudent sur la sensibilité à la casse. Ajoutez la balise META suivante dans la source de votre page Web. La différence d'orthographe à la fin de la balise est soit "/> = xml, soit"> = html.

    <meta http-equiv="Cache-control" content="public">
    <meta http-equiv="Cache-control" content="private">
    <meta http-equiv="Cache-control" content="no-cache">
    <meta http-equiv="Cache-control" content="no-store">

Source-> MetaTags

5
Karthik N G

OWASP recommande ce qui suit,

Dans la mesure du possible, assurez-vous que l'en-tête HTTP de contrôle du cache est défini avec no-cache, no-store, must-revalidate, private; et que l'en-tête HTTP pragma est défini avec no-cache.

<IfModule mod_headers.c>
    Header set Cache-Control "private, no-cache, no-store, proxy-revalidate, no-transform"
    Header set Pragma "no-cache"
</IfModule>
5
Won Jun Bae