sierra para mac desinstalar java javascript ajax caching safari

java - para - ¿Cómo desactivar el almacenamiento en caché de Ajax en el navegador Safari?



jvm 1.8 mac (3)

Tengo un problema con el almacenamiento en caché de ajax. Este también fue un problema en el navegador IE, pero lo solucioné escribiendo el código siguiente.

response.setHeader("Cache-Control", "no-cache"); response.setHeader("expires","-1"); response.setHeader("pragma","no-cache");

Pero veo que Safari4.0 en MAC está almacenando en caché la solicitud de Ajax (tenemos un requisito para respaldar esto). Fire Fox nunca es un problema. Con respecto a este "Caducar" lo estoy configurando en -1, veo muchos lugares en los que se establece 0 o alguna fecha antigua del pasado. ¿Hará la diferencia?


De acuerdo con RFC 2616 sección 9.5 sobre POST

Responses to this method are not cacheable, unless the response includes appropriate Cache-Control or Expires header fields. However, the 303 (See Other) response can be used to direct the user agent to retrieve a cacheable resource.

Por lo tanto, el navegador no debe almacenar en caché las respuestas POST, a menos que la respuesta especifique lo contrario. Al mismo tiempo, los navegadores pueden almacenar en caché las respuestas GET, a menos que la respuesta especifique lo contrario. Por lo tanto, para las solicitudes que no se deben almacenar en caché, como las solicitudes AJAX, POST es el método preferible.

Si usted, por algún motivo, no desea utilizar POST para AJAX, debe utilizar el truco mencionado por minitech , de hecho , es ampliamente utilizado para forzar al navegador a cargar la versión actual de cualquier recurso.


Envíe un parámetro adicional con su solicitud GET que nunca volverá a ser el mismo, por ejemplo, la marca de tiempo actual. Algo como:

url = url + ''&nocache='' + new Date().getTime();

Esto evitará el almacenamiento en caché.


Primero, una nota en su encabezado Expires . Su pregunta no especifica qué marco de servidor está utilizando, por lo que no estoy seguro de si esto es aplicable. Sin embargo, parece que está enviando un encabezado de Expires no válido.

El RFC requiere que Expires sea ​​una fecha , sin embargo, parece que está configurando el encabezado a un literal "-1" . Hay muchos marcos que tienen una propiedad caduca en su objeto de respuesta HTTP que toma un int y automáticamente calcula una fecha que es esa cantidad de segundos a partir de ahora.

Use un inspector HTTP para asegurarse de que su servidor esté enviando una fecha con formato válido y no -1 en el encabezado Expires .

Puede intentar hacer que su encabezado de Cache-Control más restrictivo:

response.setHeader("Cache-Control", "private, no-cache, no-store, must-revalidate");

must-revalidate le dice a los cachés que deben obedecer cualquier información de frescura que les dé. HTTP permite que las memorias caché sirvan representaciones obsoletas bajo condiciones especiales; al especificar este encabezado, le está diciendo al caché que desea que siga estrictamente sus reglas. [1]