Pregunta

Tengo un applet que está cargando imágenes a través de una conexión HTTP con URLConnection. Estoy fijando setUseCaches (true) para todas las conexiones, pero aún así no ver ningún comportamiento de almacenamiento en caché. cabeceras HTTP de mi imagen que tienen valores de memoria caché razonables. Si nos fijamos en 4528599 existe este lugar misterioso declaración:

  

La versión actual (1.3.1) de Java Plug-in sólo comprueba la caché del navegador para   archivos cuyos nombres terminan en .jar o .class. Me han dicho que para Java Plug-In   1.4 la caché del navegador se analiza lo siguiente archivo   tipos:. .class, .jar, .zip, .jpg, .gif, .wav, .au

Por supuesto, esto se ha marcado como fijo para 1.6, pero incluso bajo 1.6 no veo ningún almacenamiento en caché. Mis imágenes son archivos PNG, y en algunos casos en realidad no terminan con una extensión .png. No veo ningún almacenamiento en caché.

El informe de corrección de errores habla del 1,6 Descargar Unificado motor, pero Google no parece saber mucho al respecto.

Se supone que esto funciona o sólo otra rota "característica" del Sol. ¿Hay alguna forma o solución donde puedo conseguir mi applet para cargar imágenes PNG desde la caché del navegador? Yo preferiría no aplicar mi propio ....

ACTUALIZACIÓN: El almacenamiento en caché parece estar ligado a la ResponseCache aplicación. Ver este nota técnica para obtener más información sobre cómo funciona. La última línea dice:

  

No hay una aplicación por defecto de almacenamiento en caché en el URLConnection   Java 2 Standard Edition. Sin embargo, plugin de Java y Java Web Start hacen   proporcionar uno fuera de la caja.

Así que me parece que el que la pregunta realmente es: ¿Cómo funciona la aplicación Java Plugin ResponseCache realmente funciona? ¿Cuáles son las diferencias entre v1.4 / v1.5 / V.16

¿Alguien tiene alguna idea?

¿Fue útil?

Solución

Este método muy probable que sólo establece las directivas de encabezado HTTP Cache-Control en la solicitud de salida a valores que permitan el almacenamiento en caché. que había llamado setUseCaches (falso), que habría un

Cache-Control: no-cache

Directiva por ejemplo. Para comprobar esto, se podía poner un servidor proxy de depuración de HTTP entre el applet y el servidor y echar un vistazo a las cabeceras.

Ahora sólo porque la solicitud dice que está dispuesto a utilizar cachés, su servidor puede que no se creó para permitir a ellos. Tal vez no es el establecimiento de un Expira cabecera con una forma apropiada mucho tiempo en la respuesta, o tal vez es establecer una cabecera Cache-Control en la respuesta que prohíbe el almacenamiento en caché.

Algunas otras cosas a comprobar:

  • https respuestas no se almacenan en caché;
  • Puede que no tenga una caché HTTP entre el cliente y el servidor;
  • La única caché HTTP es la caché del navegador, pero puede ser desactivado o configurado para utilizar muy poca disco.

Si esto fuera sólo un navegador de vainilla a prueba de aplicación web, también querría asegurarse de que no estaban golpeando el botón de actualización, ya que eso es equivalente a establecer no-cache.

Otros consejos

El URLConnection clase abstracta proporciona el conjunto métodos / getUseCaches, que puede ser utilizado por cualquier subclases. Por lo que yo he podido determinar, sin embargo, la clase HttpURLConnection no utiliza los campos de ninguna manera. Establecer el valor de verdadero o falso no tendrá un comportamiento diferente.

Si desea agregar un comportamiento http cache, puede hacerlo usted mismo (escribir su propio, o extender HttpURLConnector; o el uso de sockets), o intente utilizar el Si-Modified-Since y Si-None-Match cabeceras y buscar un código de estado 304 (sin modificar). La segunda opción es probablemente el más fácil y le dará los mejores resultados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top