2012-10-11 64 views
8

Me pregunto si hay una forma de detectar cuándo se devuelve una respuesta desde un caché local. ¿Es posible?Cómo detectar cuándo XHR devuelve un recurso en caché?

La solución debe ser general y funcionar para solicitudes incondicionales. En este caso, el código de respuesta siempre es 200 correcto, pero XHR devuelve un recurso almacenado en caché para la segunda solicitud (por ejemplo, la primera respuesta contiene el encabezado Caduca, por lo que no es necesario pedirle un nuevo recurso al servidor antes de la fecha de vencimiento).

+0

No parece posible. ¿Qué le parece agregar una marca de tiempo a la respuesta? –

+0

No lo sé, pero Chrome Developer Tools puede mostrar la información; (Panel de red, columna Tamaño - desde la caché) Así que me pregunto cómo lo hacen;) (Firebug para FF lo mismo, Encabezados de respuesta: De caché) – filip26

Respuesta

5

La respuesta es encabezado Fecha

  • Si cabecera fecha en que se envía antes de la fecha a continuación una respuesta proviene de un caché.
  • Si el encabezado de fecha es posterior a la fecha en que se envió una solicitud, la respuesta es reciente.

e.g.

  • de la caché: solicitud fue enviada a las 11:00, fecha de respuesta es 10:59
  • sin caché: solicitud fue enviada a las 11:00, fecha de respuesta es 11:01
+0

Esto, por supuesto, solo funciona en una extensión de Chrome. –

+0

@RichBradshaw Encontré una solución general, finalmente. La respuesta esta actualizada – filip26

0

Compruebe si el código de estado devuelto es 304 (no modificado) en la función onreadystatechange. Algo a lo largo de las líneas de:

xmlhttp.onreadystatechange=function() 
{ 
    if (xmlhttp.readyState==4 && xmlhttp.status==304) 
    { 
     alert("Cached"); 
    } 
} 
+0

Gracias @ kmb385, pero esta solución funciona solo en caso de solicitud condicional (Si - *, por ejemplo, If-Modified-Since, If-None-Match) y estoy buscando una solución general. La pregunta ha sido actualizada. – filip26

Cuestiones relacionadas