me hacen una petición Ajax en el que me puse la cacheability respuesta y encabezados últimos modificados:actualización duro y almacenamiento en caché de XMLHttpRequest en Internet Explorer/Firefox
if (!String.IsNullOrEmpty(HttpContext.Current.Request.Headers["If-Modified-Since"]))
{
HttpContext.Current.Response.StatusCode = 304;
HttpContext.Current.Response.StatusDescription = "Not Modified";
return null;
}
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Public);
HttpContext.Current.Response.Cache.SetLastModified(DateTime.UtcNow);
Esto funciona como se esperaba. La primera vez que hago la solicitud de Ajax, recibo 200 OK
. La segunda vez que obtengo 304 Not Modified
.
Cuando duro la actualización en Chrome (Ctrl + F5), obtengo 200 OK
- ¡fantástico!
Cuando realizo una actualización en Internet Explorer/Firefox, obtengo 304 Not Modified
. Sin embargo, cualquier otro recurso (JS/CSS/HTML/PNG) devuelve 200 OK
.
La razón es porque el encabezado "If-Not-Modified" se envía para XMLHttpRequest, independientemente de la actualización estricta en esos navegadores. Creo que Steve Souders lo documenta here.
He intentado configurar un ETag y acondicionamiento en "If-None-Match" en vano (se mencionó en los comentarios en la página de Steve Souders).
¿Alguien tiene gemas de sabiduría aquí?
Gracias, Ben
actualización
pude comprobar el "-Desde If-Modified" en contra de una fecha de la última modificación almacenado. Sin embargo, es de esperar que esta pregunta ayude a otros usuarios de SO que encuentran que el encabezado no se establece correctamente.
Actualización 2
Mientras que la solicitud se envía con el "If-Modified-Since" de cabecera cada vez. Internet Explorer ni siquiera realizará la solicitud si no se establece un vencimiento o se establece en una fecha futura. ¡Inútil!
Actualización 3
Esto bien podría ser un blog en vivo ahora. Internet Explorer no se molesta en realizar la segunda solicitud cuando localhost. Usar una IP real o el loopback funcionará.
¿trató de evitar el almacenamiento en caché mediante la alteración del nombre de fichero en cada solicitud utilizando un número aleatorio o el valor de fecha y hora en el script src ruta (como src = 'MyScript.js? Q = 45920')? –
Lo quiero en caché a menos que provenga de una actualización completa. Por lo tanto, establecer un parámetro de cadena de consulta aleatorio no ayuda. ¡Gracias por la sugerencia! –