Cabeceras de caches en CGIs y páginas dinámicas


Actualizado: mirar en un nuevo artículo.

Muchas veces no sabemos el significado o el funcionamiento de las cabeceras de caches. Este enlace explica y prueba vuestras cabeceras. Además adjunto el código de Bulma que gestiona las caches de los navegadores.

Para ayudarte a entender como los caches de web tratan una web página, la Cacheability Engine si fijará al URL que le pases y hasta la imágenes referencidad y te dará información específica de datos ralacionados con cache que fue enviada en el header.

A mí me ayudó mucho para poner cabeceras nuevas en el web de Bulma, ahora el servidor retorna la fecha de última modificación de la base de datos en el header “Last-Modified”.

Eso si… pasad del mensaje que el reloj puede estar mal, en bulma.net tiene el reloj perfectamente sincronizado* con el NTP (ver pié) y sin embargo sale el mensaje.

–ricardo

[gallir@m3d gallir]$ ntptrace m3d
m3dlx1: stratum 2, offset 0.000030,
synch distance 0.04970
err.ee.ethz.ch: stratum 1, offset 0.004936,
synch distance 0.00017, refid ‘DCFa’

CODIGO PHP EN FUNCIONAMIENTO EN BULMA
————————————-
function DoHeaders() {
// Autor: RAG, implementaciónm de cabecera para weak y strong
// validator de acuerdo al RFC2616 del HTTP/1.1
// Tiene en cuenta que el Netcrap no es del todo compatible
global $lrcLogin; // Información de usuario autentificado

$lastModified = $this->LastModified(); // Ult. modif. de la base de datos
if($lrcLogin->IsLogged() == TRUE) {
$tag=”\”AUT”.$lastModified.”\””; // Para las páginas autentificadas
} else {
$tag=”\”PUB”.$lastModified.”\””; // y las públicas
}
header(“ETag: $tag”); // El nuevo TAG
$headers = getallheaders();
$refresh=1; // refresca por defecto
if($this->cache) {
if(isset($headers[“If-Modified-Since”])) { //Verificamos fecha
$since = strtotime($headers[“If-Modified-Since”]);
if($since >= $lastModified ) $refresh=0;
}

if(isset($headers[“If-None-Match”])) { // verificamos ETag

if(strcmp($headers[“If-None-Match”], $tag) == 0 )
$refresh=0;
else {
$refresh=1;
$lastModified= time(); // El IE corta la conexión
// si la fecha de su copia es superior
}
}
if($refresh==0) {
header(“HTTP/1.1 304 Not changed”);
// La primera línea de los headers debe ser el status
// sino el Netcrap se lía y da “No Data”
ob_end_clean(); // Just in case..
}
$strLastModified = gmdate(“r”, $lastModified);
header(“Expires: ” . gmdate(“r”, time()+1));
header(“Last-Modified: $strLastModified”);

}
header(“Cache-Control: max-age=1, must-revalidate”); // HTTP/1.1
header(“Pragma: no-cache”); // HTTP/1.0
if($refresh==0) die;
}

Este post ha sido traido de forma automatica desde https://web.archive.org/web/20140625063149/http:/bulma.net/body.phtml?nIdNoticia=406 por un robot nigromante, si crees que puede mejorarse, por favor, contactanos.


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.