¿No puede el navegador simplemente usar su caché de llamadas ajax anteriores?

Estoy intentando confiar en la memoria caché del navegador para retener los datos JSON devueltos de las llamadas AJAX en jQuery.

La actividad normal del navegador se basa en el caché del navegador todo el tiempo. Ejemplo: las imágenes jpg y gif no se vuelven a encontrar en una recarga de página.

Pero cuando intento usar jQuery getJSON ajax calls, parece que no puedo evitar recuperar los datos del servidor.

Mis encabezados devueltos tienen este aspecto (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

Sin embargo, una actualización inmediata de la página hace que las solicitudes idénticas lleguen al 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 depender de guardar datos en el DOM. Quiero algo que se comporte como lo hacen las imágenes en caché durante una recarga de página.

¿No puede el navegador simplemente obtenerlo de su propio caché?

--x - x - x - x ACTUALIZACIÓN --x - x - x--

Para mi decepción, varias personas respetables están de acuerdo en que esto no es posible. Algunos incluso argumentan que no debería ser así (lo cual todavía me desconcierta).

Stubburn a una falla, intenté lo siguiente:

Configuro el encabezado de Etag en todas las páginas salientes que quiero que se almacenen en la caché (escojo algunos argumentos de URL de elección que representan los datos que solicito y solo los uso para el valor de Etag)

Al comienzo de la siguiente solicitud, simplemente verifico si el encabezado 'If-None-Match' está en la solicitud. Si es así, entonces el navegador no almacena en caché la solicitud como quería, así que envié una respuesta 304 No modificada.

Las pruebas muestran que Firefox no almacenará en caché mi solicitud (pero todavía puedo evitar la parte de 'buscar los datos caros' de mi cgi), mientras que IE6 realmente la almacenará en caché (y no intentaré recuperarlos del servidor).

No es una respuesta bonita, pero está funcionando para mí por ahora.
(esas pésimas actualizaciones de la página completa de los datos del gráfico no serán tan lentas ni caras ahora).

(¿Qué? ¡Estoy ejecutando IE6! ¡Dios mío! ¡Oh, mira una ardilla!)

Respuestas a la pregunta(5)

Su respuesta a la pregunta