type protocolo personalizados para encabezados dummies content cabeceras cabecera http caching

protocolo - HTTP ¿Vence el encabezado que el navegador no respeta?



http para dummies (4)

Cualquier error en su certificado https hará que el navegador no respete sus encabezados.

Pruébelo sin https y vea si funciona en http simple.

Ver esta respuesta https://stackoverflow.com/a/17716911

Tengo una situación en la que mi servidor web (incrustado) está enviando el encabezado Expires, pero el navegador no parece respetar la configuración del encabezado, es decir, si actualizo la página, el navegador solicita los recursos que se supone que están almacenados en la memoria caché. Los siguientes son los encabezados que se intercambian:

https://192.168.1.180/scgi-bin/ajax/ajax.cgi GET /scgi-bin/ajax/ajax.cgi HTTP/1.1 Host: 192.168.1.180 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11 (.NET CLR 3.5.30729) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Cache-Control: max-age=0 HTTP/1.x 200 OK Date: Wed, 24 Jun 2009 20:26:47 GMT Server: Embedded HTTP Server. Connection: close Content-Type: text/html ---------------------------------------------------------- https://192.168.1.180/scgi-bin/ajax/static.cgi?fn=images/logo.jpg&ts=20090624201057 GET /scgi-bin/ajax/static.cgi?fn=images/logo.jpg&ts=20090624201057 HTTP/1.1 Host: 192.168.1.180 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11 (.NET CLR 3.5.30729) Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: https://192.168.1.180/scgi-bin/ajax/ajax.cgi Cache-Control: max-age=0 HTTP/1.x 200 OK Date: Wed, 24 Jun 2009 20:26:47 GMT Server: Embedded HTTP Server. Connection: close Expires: Wed, 1 Jun 2011 20:00:00 GMT Content-Type: image/jpg ----------------------------------------------------------

Ajax.cgi devuelve una página html con un gráfico de logotipo (a través del script static.cgi), que me gustaría almacenar en caché, pero el navegador solicita el logotipo en cada actualización.


El navegador ignora el encabezado Expires si actualiza la página. Siempre verifica si la entrada de la caché sigue siendo válida contactando con el servidor web. Idealmente, usará el encabezado de solicitud If-Modified-Since para que el servidor pueda devolver ''304 No modificado'' si la entrada de la caché sigue siendo válida.

No está configurando el encabezado Last-Modified, por lo que el navegador debe realizar un GET incondicional del contenido para asegurarse de que esté actualizado.

Algunas reglas de oro para establecer Expires y Last-Modified se describen en esta publicación de blog:

http://blog.httpwatch.com/2007/12/10/two-simple-rules-for-http-caching/


El script CGI parece que tiene un parámetro de marca de tiempo ... esto no está cambiando, ¿verdad? El navegador debe tratar cada URL única como un objeto diferente en el caché, por lo que si se actualiza con cada solicitud, no coincidirá con la imagen almacenada en caché.

Además, el campo Expires no tiene exactamente el formato RFC 1123, porque necesita dos dígitos para la fecha. Esto puede o no ser un problema, pero es algo para verificar. El navegador incluye Cache-Control: max-age=0 , lo que indica que cree que su caché está potencialmente desactualizado.

Una vez que el servidor recibe esta solicitud de validación, puede devolver 304 (Not Modified) o 200 (OK) , como está haciendo actualmente.


¿Qué estás haciendo en tu navegador? Parece que haces clic en el botón de recargar o incluso algo como shift + Reload. Normalmente, el navegador no enviaría un encabezado de Cache-Control: max-age=0 . Eso significa que el navegador ha tirado la imagen en caché y quiere volver a obtenerla.

Si solo navegas a otra página y luego vuelves, el navegador debe respetar tu encabezado Expires.

Además, puede agregar un encabezado Cache-control: public a su respuesta. Eso permite que los proxies y el navegador explícitamente guarden la imagen.