Estoy tratando de confiar en el caché del navegador para contener Datos JSON devueltos por llamadas AJAX en jQuery.¿El navegador no puede usar su caché de llamadas ajax anteriores?
La actividad normal del navegador depende de la memoria caché del navegador todo el tiempo. Ejemplo: las imágenes jpg y gif no se vuelven a almacenar en una página recargada.
Pero cuando intento usar jQuery getJSON llamadas ajax, parece que no puedo evitar recuperar los datos del servidor.
Mis cabeceras devueltas ven así (confirmado con Firebug):
Transfer-Encoding: chunked
Date: Wed, 05 Aug 2009 02:55:39 GMT
Content-Type: text/plain; charset=ISO-8859-1
Expires: Wed, 05 Aug 2009 03:55:39 GMT
Cache-Control: max-age=3600
embargo, una actualización inmediata de la página hace que las solicitudes idénticas para golpear el servidor.
He visto varias publicaciones sobre cómo evitar el comportamiento de almacenamiento en caché, que no es lo que necesito. He visto varias publicaciones sobre la utilización del almacenamiento en caché, pero todas parecen confiar en al guardar datos en el DOM. Quiero algo que se comporte como las imágenes en caché durante una recarga de página.
¿No puede el buscador simplemente buscarlo desde su propio caché?
--x - x - x - x ACTUALIZACIÓN --x - x - x--
Para mi gran decepción, varias personas respetables de acuerdo en que esto no es sólo posible. Algunos incluso argumentan que no debería ser (lo que todavía me desconcierta).
Stubburn a un fallo, he intentado lo siguiente:
puse la cabecera ETag en todas las páginas salientes que quiero ser en caché (Recojo algunos argumentos URL opción que representan los datos que estoy solicitando y solo use eso para el valor Etag)
Al comienzo de la próxima solicitud, simplemente verifico si el encabezado 'If-None-Match' está en la solicitud. Si es así, entonces el navegador no está almacenando en caché la solicitud como yo quería, así que envié una respuesta 304 No modificada.
Las pruebas muestran que Firefox no va a almacenar en caché mi solicitud (pero todavía puedo evitar el 'recuperar los datos caros' parte de mi cgi), mientras que IE6 realmente almacenar en caché (y incluso no intentar ir a buscar detrás de la servidor).
No es una respuesta bonita, pero funciona para mí por ahora
(esas refrescantes actualizaciones de datos de gráficos a toda página no serán tan lentas ni costosas ahora).
(¿Qué? Estoy corriendo IE6! OMG! Oh, mira una ardilla!)
Tal vez tengo que utilizar si-modified-since solicitudes para convertir éstos a HTTP 304 códigos de estado? – ericslaw
maldito, ni siquiera los encabezados 'if-modified-since' enviados a petición ... tanto para el 304 enfoque – ericslaw
Tuve un poco de suerte al configurar Etag en la solicitud inicial y devolver 304 si existe el encabezado 'If-None-Match' en solicitudes posteriores – ericslaw