evitar cache borrar php http-headers browser-cache cache-control

cache - Cómo prevenir la caché del navegador para el sitio php



no cache html5 (5)

Aquí, si desea controlarlo a través de HTML: haga clic en la opción 1 a continuación:

<meta http-equiv="expires" content="Sun, 01 Jan 2014 00:00:00 GMT"/> <meta http-equiv="pragma" content="no-cache" />

Y si desea controlarlo a través de PHP: hágalo a continuación Opción 2:

header(''Expires: Sun, 01 Jan 2014 00:00:00 GMT''); header(''Cache-Control: no-store, no-cache, must-revalidate''); header(''Cache-Control: post-check=0, pre-check=0'', FALSE); header(''Pragma: no-cache'');

Y la Opción 2 SIEMPRE ES MEJOR para evitar problemas de caché basados ​​en proxy.

Tengo un sitio php ejecutándose en el servidor en la nube. Cuando agrego nuevos archivos css, js o imágenes, el navegador carga los mismos viejos archivos js, css e image almacenados en caché.

Mi sitio tiene un doctype y metaetiqueta como se muestra a continuación

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta http-equiv="Page-Enter" content="blendTrans(Duration=1.0)"> <meta http-equiv="Page-Exit" content="blendTrans(Duration=1.0)"> <meta http-equiv="Site-Enter" content="blendTrans(Duration=1.0)"> <meta http-equiv="Site-Exit" content="blendTrans(Duration=1.0)">

Debido al doctype y el código de metadatos anteriores, estoy cargando los mismos archivos en caché en el navegador en lugar de uno nuevo.


Evitar el caché del navegador no es una buena idea según el caso. Buscando una solución encontré soluciones como esta:

<link rel="stylesheet" type="text/css" href="meu.css?v=<?=filemtime($file);?>">

el problema aquí es que si el archivo se sobrescribe durante una actualización en el servidor, que es mi escenario, la caché se ignora porque la marca de tiempo se modifica, incluso el contenido del archivo es el mismo.

Utilizo esta solución para obligar al navegador a descargar activos solo si se modifica su contenido:

<link rel="stylesheet" type="text/css" href="meu.css?v=<?=hash_file(''md5'', $file);?>">


Puedes intentar esto:

header("Expires: Tue, 03 Jul 2001 06:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header("Connection: close");

¡Espero que ayude a prevenir la caché, si es que hay alguna!


Tuve un problema con el almacenamiento en caché de mis archivos CSS. Establecer encabezados en PHP no me ayudó (tal vez porque los encabezados tendrían que estar configurados en el archivo de la hoja de estilo en lugar de la página que lo enlaza).

Encontré la solución en esta página: https://css-tricks.com/can-we-prevent-css-caching/

La solución:

Adjunte la marca de tiempo como la parte de consulta del URI para el archivo vinculado.
(Se puede usar para css, js, imágenes, etc.)

Para desarrollo:

<link rel="stylesheet" href="style.css?<?php echo date(''Ym-d_H:i:s''); ?>">

Para producción (donde el almacenamiento en caché es más que nada bueno):

<link rel="stylesheet" type="text/css" href="style.css?version=3.2">
(y reescriba manualmente cuando sea necesario)

O una combinación de estos dos:

<?php define( "DEBUGGING", true ); // or false in production enviroment ?> <!-- ... --> <link rel="stylesheet" type="text/css" href="style.css?version=3.2<?php echo (DEBUGGING) ? date(''_Y-m-d_H:i:s'') : ""; ?>">

EDITAR:

O una combinación más bonita de esos dos:

<?php // Init define( "DEBUGGING", true ); // or false in production enviroment // Functions function get_cache_prevent_string( $always = false ) { return (DEBUGGING || $always) ? date(''_Y-m-d_H:i:s'') : ""; } ?> <!-- ... --> <link rel="stylesheet" type="text/css" href="style.css?version=3.2<?php echo get_cache_prevent_string(); ?>">


prueba esto

<?php header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); ?>