2012-03-16 10 views
15

estoy usando Google Chrome y me di cuenta de que cada vez que hago una solicitud XHR consigo los siguientes encabezados poner en la solicitud:jQuery XmlHttpRequest Cache-Control siendo ignorada

Cache-Control: no-cache 
Pragma: no-cache 

Si se lee en la especificación http://www.w3.org/TR/XMLHttpRequest/ que dice lo siguiente

Si el agente de usuario implementa un caché HTTP debe respetar encabezados cache-control en las cabeceras de solicitud de autor (por ejemplo, cache-control: no-cache no pasa por el caché). No debe enviar Cache-Control o Pragma encabezados de solicitud automáticamente a menos que el usuario final solicite explícitamente dicho comportamiento (por ejemplo, al volver a cargar la página).

Bueno, yo estoy tratando lo siguiente:

$.ajax(myUrl, { 
    type: 'get', 
    dataType: 'json' 
    cache: true, 
    headers: { 
     'Cache-Control': 'max-age=200' 
    } 
    }) 

Como se puede ver que estoy establecer explícitamente la cabecera Cache-Control con la esperanza de conseguir una copia en caché de mi recurso. Bueno, Chrome parece ignorar el encabezado Cache-Control.

¿Es posible no enviar el encabezado Cache-Control: no-cache cuando se realiza una solicitud XHR?

Respuesta

46

Esto fue un error tonto. Tenía las herramientas de desarrollo configuradas para "Deshabilitar el caché". Es por eso que siempre estaba agregando el encabezado de control de caché. Si esto le sucede a usted, asegúrese de asegurarse de que la casilla no esté marcada.

Raul

+1

Sí, tenga en cuenta que Firebug también tiene "Deshabilitar la memoria caché del navegador" en el menú "Red". Me ha picado también esta. – harpo

+0

He estado intentando averiguar por qué nativo fetch() no devolvía datos de la caché, incluso cuando los encabezados de Cache-Control estaban siendo configurados correctamente por el servidor. Gracias por ayudar a corregir este descuido, me estaba volviendo loco. –

+0

Pasé tanto tiempo tratando de rastrear esto. ¡Gracias! –

3

Acabo de probarlo y su código funciona bien, a excepción de una coma faltante.

Abra la pestaña de la red, a continuación, intente esto en la consola en esta página:

$.ajax('http://stackoverflow.com/', { 
    type: 'get', 
    dataType: 'json', 
    cache: true, 
    headers: { 
     'Cache-Control': 'max-age=123' 
    } 
}) 

Comprobar la pestaña red de nuevo, haga clic en la solicitud que acaba de hacer, y haga clic en la pestaña "cabeceras". Verá que la solicitud se envió con el encabezado Cache-Control que proporcionó.

+0

Sí, lo siento. Fue mi culpa. Debería haber revisado las herramientas de desarrollador para asegurarme de que no tenía el almacenamiento en caché desactivado. – HaxElit

Cuestiones relacionadas