¿Cómo establecer encabezados HTTP (para el control de caché)?


¿Cómo habilitar el almacenamiento en caché del navegador para mi sitio? ¿Acabo de poner cache-control: public en algún lugar de mi encabezado como este?

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

Estoy usando la última versión de PHP desarrollando la última versión de XAMPP.

Author: Elias Ojala, 2010-12-19

8 answers

Para usar el control de caché en HTML, se utiliza la etiqueta meta , por ejemplo,

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

El valor en el campo de contenido se define como uno de los cuatro valores a continuación.

Cierta información sobre el encabezado Cache-Control es la siguiente

HTTP 1.1. Valores permitidos = PÚBLICO / PRIVADO | NO-CACHE / NO-STORE.

Public - puede almacenarse en cachés compartidos públicos.
Privado-solo se puede almacenar en caché privada.
No-Cache-no se puede almacenar en caché.
Sin tienda-mayo se almacenará en caché pero no se archivará.

La directiva CACHE-CONTROL: NO-CACHE indica que la información almacenada en caché no debe utilizarse y en su lugar, las solicitudes deben enviarse al servidor de origen. Esta directiva tiene la misma semántica que el PRAGMA:NO-CACHE.

Los clientes DEBEN incluir PRAGMA: NO-CACHE y CACHE-CONTROL: NO-CACHE cuando se envía una solicitud sin caché a un servidor que no se sabe que es compatible con HTTP/1.1. Véase también CADUCA.

Nota: puede ser mejor para especificar comandos de caché en HTTP que en instrucciones META, donde pueden influir más que el navegador, pero proxies y otros intermediarios que pueden almacenar información en caché.

 167
Author: Codemwnci,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-25 13:41:46

Puede establecer las cabeceras en PHP usando:

<?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)

?>

Tenga en cuenta que los encabezados exactos utilizados dependerán de sus necesidades (y si necesita soportar HTTP 1.0 y/o HTTP 1.1)

 117
Author: scunliffe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-01 01:50:48

Como escribí (en http://www.williamferreira.net/blog/2011/10/04/controle-de-cache-apache/) es mejor usar el archivo .htacces. Sin embargo, tenga cuidado con el tiempo que deja el contenido en la caché.

Uso:

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

Donde: 604800 = 7 días

PD: Esto se puede utilizar para restablecer cualquier encabezado

 38
Author: William,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-05 15:55:24

La página en http://www.askapache.com/htaccess/apache-speed-cache-control.html sugiere usar algo como esto:

Agregar Encabezados de Control de Caché

Esto va en tu raíz .htaccess pero si tiene acceso a httpd.conf que es mejor.

Este código utiliza la directiva FilesMatch y la directiva Header para añadir encabezados de Control de caché a ciertos archivos.

# 480 weeks
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=290304000, public"
</FilesMatch>
 26
Author: angry kiwi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-11 11:54:49

Para el servidor Apache, debe comprobar mod_expires para establecer los encabezados Expires y Cache-Control.

Alternativamente, puede usar la directiva Header para agregar Control de caché por su cuenta:

Header set Cache-Control "max-age=290304000, public"
 13
Author: Peter Štibraný,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-18 22:13:22

Este es el mejor .htaccess que he utilizado en mi sitio web real:

<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>
 12
Author: Erich García,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-27 23:28:17

OWASP recomienda lo siguiente,

Siempre que sea posible, asegúrese de que el encabezado HTTP cache-control esté configurado con no-cache, no-store, must-revalidate, private; y que el encabezado HTTP pragma esté configurado con 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
Author: Won Jun Bae,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-22 17:47:14

La etiqueta meta cache control permite a los editores web definir cómo las páginas deben ser manejadas por cachés. Incluyen directivas para declarar lo que debe ser cacheable, lo que puede ser almacenado por cachés, modificaciones del mecanismo de caducidad, y revalidación y recargar controles.

Los valores permitidos son:

Public-puede almacenarse en cachés compartidos públicos
Private-solo se puede almacenar en caché privada
no-Cache-no se puede almacenar en caché
no-Store-se puede almacenar en caché, pero no archivado

Tenga cuidado con la sensibilidad de mayúsculas y minúsculas. Agregue la siguiente etiqueta meta en la fuente de su página web. La diferencia en la ortografía al final de la etiqueta es que usa "/ > = xml o " > = 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

 4
Author: Karthik N G,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-05 11:25:03