php - evitar - Auditoría de Google Chrome en el almacenamiento en caché
http-equiv="cache-control" (3)
La expiración de 3 horas podría no ser suficiente "tiempo" para las cosas de velocidad lenta y de página, y es posible que se quejen. He visto esto con contenido estático en mis sitios con vencimiento de 4 horas y yslow (no lo he intentado con las cosas de Google).
La mayoría de ellos quiere contenido estático versionado con tiempos de caducidad LARGOS (como 1 año); ver aquí
Si ejecuto una auditoría en mis sitios con Google Chrome, aparece este mensaje en la sección de almacenamiento en caché del navegador Leverage :
A los siguientes recursos le falta una caducidad de caché. Los navegadores pueden no almacenar en caché los recursos que no especifiquen una caducidad:
Una lista de todas las imágenes sigue. Recibo un aviso similar en el caché de proxy de apalancamiento :
Considere agregar un encabezado "Cache-Control: public" a los siguientes recursos:
Además de las imágenes, también recibo un aviso sobre los archivos HTML, CSS y JavaScript:
Los siguientes recursos son explícitamente no cacheables. Considere hacerlos cacheables si es posible:
Es gracioso porque he trabajado duro para almacenar en caché todos los contenidos estáticos (excepto las imágenes, donde acabo de dejar la configuración predeterminada de Apache). Firefox sí almacena todos estos elementos en caché.
¿Hay algo que debería mejorar en mis encabezados HTTP?
Aquí está el conjunto de encabezado completo de algunos elementos que se cargaron después de eliminar el caché del navegador. Las imágenes usan configuraciones predeterminadas que realmente no revisé antes, el resto debe almacenarse en caché durante tres horas. Puedo establecer encabezados con ambos .htaccess
y PHP
.
PNG
HTTP/1.1 200 OK
Date: Sat, 31 Jul 2010 12:46:14 GMT
Server: Apache
Last-Modified: Thu, 18 Mar 2010 21:40:54 GMT
Etag: "c48024-230-4821a15d6c580"
Accept-Ranges: bytes
Content-Length: 560
Keep-Alive: timeout=4
Connection: Keep-Alive
Content-Type: image/png
HTML
HTTP/1.1 200 OK
Date: Sat, 31 Jul 2010 12:46:13 GMT
Server: Apache
X-Powered-By: PHP/5.2.11
Expires: Sat, 31 Jul 2010 15:46:13 GMT
Cache-Control: max-age=10800, s-maxage=10800, must-revalidate, proxy-revalidate
Content-Encoding: gzip
Vary: Accept-Encoding
Last-Modified: Wed, 24 Mar 2010 20:30:36 GMT
Keep-Alive: timeout=4
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=ISO-8859-15
CSS
HTTP/1.1 200 OK
Date: Sat, 31 Jul 2010 12:48:21 GMT
Server: Apache
X-Powered-By: PHP/5.2.11
Expires: Sat, 31 Jul 2010 15:48:21 GMT
Cache-Control: max-age=10800, s-maxage=10800, must-revalidate, proxy-revalidate
Content-Encoding: gzip
Vary: Accept-Encoding
Last-Modified: Thu, 18 Mar 2010 21:40:12 GMT
Keep-Alive: timeout=4
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/css
JavaScript
HTTP/1.1 200 OK
Date: Sat, 31 Jul 2010 12:48:21 GMT
Server: Apache
X-Powered-By: PHP/5.2.11
Expires: Sat, 31 Jul 2010 15:48:21 GMT
Cache-Control: max-age=10800, s-maxage=10800, must-revalidate, proxy-revalidate
Content-Encoding: gzip
Vary: Accept-Encoding
Last-Modified: Thu, 18 Mar 2010 21:40:12 GMT
Keep-Alive: timeout=4
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/x-javascript
Actualizar
Probé la sugerencia de Jumby y configuré el vencimiento de mi CSS a 1 año:
Cache-Control:max-age=31536000, s-maxage=31536000, must-revalidate, proxy-revalidate
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:4198
Content-Type:text/css
Date:Mon, 02 Aug 2010 20:48:56 GMT
Expires:Tue, 02 Aug 2011 20:48:56 GMT
Keep-Alive:timeout=5, max=99
Last-Modified:Thu, 18 Mar 2010 20:40:12 GMT
Server:Apache/2.2.14 (Win32) PHP/5.3.1
Vary:Accept-Encoding
X-Powered-By:PHP/5.3.1
Sin embargo, Chrome aún afirma " explícitamente no cacheable ".
El problema es la parte "debe revalidar" de su directiva de control de caché. Deshazte de eso, y deberías ser bueno para ir.
Acabo de recibir un problema similar, descubrí que la misma configuración y el código producen una advertencia de auditoría de Chrome cuando pruebo en mi servidor de prueba en 127.0.0.1, pero no en el servidor real con un nombre DNS real.