Estoy trabajando en una pequeña aplicación de una sola página usando HTML5. Una característica es mostrar los documentos PDF incrustados en la página, que documentos se pueden seleccionar de una lista.¿Por qué Chrome usa el caché del cliente de manera diferente en estos dos escenarios?
NOw Estoy tratando de hacer que Chrome (al principio, y luego todos los otros navegadores modernos) usen la memoria caché del cliente local para cumplir con la simple solicitud GET para documentos PDF sin pasar por el servidor (que no sea la primera vez del curso)) Hago que el archivo PDF se solicite configurando la propiedad "datos" en un elemento <object>
en HTML.
He encontrado un working example for XMLHttpRequest (no <object>
). Si utiliza las herramientas para desarrolladores de Chrome (pestaña Red) se puede ver que la primera solicitud va al servidor, y da lugar a una respuesta con estos encabezados:
Cache-Control:public,Public
Content-Encoding:gzip
Content-Length:130
Content-Type:text/plain; charset=utf-8
Date:Tue, 03 Jul 2012 20:34:15 GMT
Expires:Tue, 03 Jul 2012 20:35:15 GMT
Last-Modified:Tue, 03 Jul 2012 20:34:15 GMT
Server:Microsoft-IIS/7.5
Vary:Accept-Encoding
La segunda petición se sirve de la caché local sin ningún tipo de servidor ida y vuelta, que es lo que quiero.
De vuelta en mi propia aplicación, que luego se usa ASP-NET MVC 4 y ajuste
[OutputCache(Duration=60)]
en mi controlador. La primera solicitud a este controlador - con URL http://localhost:63035/?doi=10.1155/2007/98732
resultados en las siguientes encabezados:
Cache-Control:public, max-age=60, s-maxage=0
Content-Length:238727
Content-Type:application/pdf
Date:Tue, 03 Jul 2012 20:45:08 GMT
Expires:Tue, 03 Jul 2012 20:46:06 GMT
Last-Modified:Tue, 03 Jul 2012 20:45:06 GMT
Server:Microsoft-IIS/8.0
Vary:*
la segunda petición resultados en otro ida y vuelta al servidor, con una respuesta mucho más rápido (lo que sugiere el almacenamiento en caché del lado del servidor?) Pero devuelve 200 OK y estos encabezados:
Cache-Control:public, max-age=53, s-maxage=0
Content-Length:238727
Content-Type:application/pdf
Date:Tue, 03 Jul 2012 20:45:13 GMT
Expires:Tue, 03 Jul 2012 20:46:06 GMT
Last-Modified:Tue, 03 Jul 2012 20:45:06 GMT
Server:Microsoft-IIS/8.0
Vary:*
La tercera solicitud de los mismos resultados de URL en otra ida y vuelta y una respuesta 304 con estos encabezados:
Cache-Control:public, max-age=33, s-maxage=0
Date:Tue, 03 Jul 2012 20:45:33 GMT
Expires:Tue, 03 Jul 2012 20:46:06 GMT
Last-Modified:Tue, 03 Jul 2012 20:45:06 GMT
Server:Microsoft-IIS/8.0
Vary:*
Mi pregunta es, ¿cómo debo configurar el atributo OutputCache para obtener el comportamiento deseado (es decir Solicitudes PDF completadas desde el caché del cliente, dentro de X segundos de la solicitud inicial)?
¿O no estoy haciendo las cosas bien cuando hago que se visualice el PDF configurando la propiedad "data" en un elemento <object>
?
No exactamente. Establecer la ubicación en el Cliente (equivalente a "Privado" en el encabezado HTTP Cache-Control) le dice a las ubicaciones compartidas de caché que no lo guarden en caché. Pero no debería afectar si el navegador del cliente decide guardarlo en la memoria caché o no. – ToolmakerSteve