2012-08-30 14 views
10

Experimento un comportamiento extraño de ExpressJS. En una segunda solicitud a mi URL de la API basada en node.js/express, siempre devuelve el código de respuesta 304 Not Modified a IE. Otros navegadores obtienen 200 (Chrome/FF). El problema es que devuelve 304 incluso si el contenido realmente ha sido cambiado. Traté de buscar y no pude encontrar nada sobre el tema. También traté de encontrar una diferencia en los encabezados de las solicitudes de IE y Chrome, y pude ver cualquier encabezado que pudiera causar eso. Cualquier ayuda será apreciada.exprés devuelve 304 para solicitudes de repetición de IE

Tengo que añadir la conexión pasa a través de SSL, en caso de que importa

+0

¿Cómo está determinando qué código de respuesta IE obtiene? – josh3736

+0

+1 ¡Tengo el mismo problema! – Erik

+0

josh3736, estoy comprobando el inicio de sesión de la red Herramientas de desarrollador de IE – bbbonthemoon

Respuesta

2

Bueno, he conseguido solucionarlo mediante la adición de cabecera Cache-Control

+0

Eso es más de una solución. Con suerte, alguien puede publicar una solución. – Brad

3

El encabezado Cache-Control es una solución. El error está en la interpretación de Internet Explorer de la especificación de HTTP 1.1 para el encabezado.

He añadido esto a mi controlador de ruta, que ha solucionado el problema. También necesita un encabezado Last-Modified o ETag, pero express ya lo estaba enviando por mí.

res.setHeader("Expires", "-1"); 
res.setHeader("Cache-Control", "must-revalidate, private"); 

Ver: Make IE to cache resources but always revalidate

4

teniendo el mismo problema miro mucho alrededor y resulta que en realidad el problema viene de un almacenamiento en caché agresiva estúpida de ajax obtener las solicitudes de IE. De hecho, cuando ve este 304, la solicitud real nunca llega al servidor, pero IE responde con los últimos datos de su caché. Este es el comportamiento previsto por MS, y por lo tanto solo hay soluciones temporales.

Mi preferido es adjuntar a cada solicitud AJAX get un parámetro de consulta inútil que contiene la hora actual. Obligará a IE a recuperar siempre desde el servidor. La parte buena es si utiliza jQuery, puede configurarlo para que esto automáticamente con

$.ajaxSetup({cache:false}) 

Otra solución es utilizar las peticiones POST en lugar de GET, pero esto no es siempre una opción.

Cuestiones relacionadas