2011-11-03 15 views
21

Tengo muchas imágenes en una carpeta que se usan en la aplicación. Al usar el manifiesto de caché, sería más fácil para el mantenimiento si pudiera especificar un comodín para cargar todas las imágenes o archivos en un determinado directorio para que se almacenen en caché.¿Cómo especifico un comodín en el manifiesto de caché HTML5 para cargar todas las imágenes en un directorio?

E.g.

CACHE MANIFEST 
# 2011-11-3-v0.1.8 
#-------------------------------- 
# Pages 
#-------------------------------- 
../index.html 
../edit.html 
#-------------------------------- 
# JavaScript 
#-------------------------------- 
../js/jquery.js 
../js/main.js 
#-------------------------------- 
# Images 
#-------------------------------- 
../img/*.png 

¿Se puede hacer esto? Lo he intentado en algunos navegadores con ../img/* también, pero parece que no funciona.

+0

** NOTA: ** en 2017, la API [Trabajador de servicio] (https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers) API está reemplazando rápidamente a AppCache, y los navegadores están empezando a ignorar un archivo '.manifest'; Firefox 44 incluso sugiere usar trabajadores de servicio en su lugar en la consola cuando encuentra un archivo' .manifest'. –

Respuesta

17

No creo que funcione de esa manera. Tendrá que especificar todas las imágenes una a una, o tener un simple script PHP para recorrer el directorio y sacar el archivo (con el encabezado correcto text/cache-manifest por supuesto).

+19

En realidad, un comodín funciona ** si ** permite las listas de directorios, es decir, si navega a ... mysite.com/img/ y obtiene una lista de todos los archivos en el directorio. Pasé la mayor parte de la tarde tratando de descubrir por qué el sitio estaba trabajando en mi máquina de desarrollo (que permite listados de directorios) pero no en mi servidor de prueba (que no permite listados). Sin embargo, por razones de seguridad, la mayoría de los servidores deshabilitan las listas de directorios ... – JvO

+1

@JVO: ¡Interesante! No lo sabía ¿Podrías editar mi respuesta para incluir eso? Aceptaré su edición sugerida (también obtendrá un par de puntos: P) –

21

Sería más fácil, pero ¿cómo va a funcionar? El archivo de manifiesto es algo que se analiza y se actúa en el navegador, que no tiene un conocimiento especial de los archivos en su servidor que no sean los que le ha indicado. Si el navegador ve esto:

../img/*.png 

¿Cuál es la primera imagen que el navegador debe solicitar al servidor? Vamos a empezar con esto:

../img/1.png 
../img/2.png 
../img/3.png 
../img/4.png 
... 
../img/2147483647.png 

eso es todo lo que las imágenes que pudieran existir con un nombre numérico, parando semi-arbitrariamente en 231-1. ¿Cuántos de esos 2 mil millones de archivos existen en su directorio img? ¿Realmente desea que un navegador haga todas esas solicitudes solo para obtener 2 billones 404? Para completar el navegador probablemente también desee solicitar todos los equivalentes llenos de cero:

../img/01.png 
../img/02.png 
../img/03.png 
../img/04.png 
... 
../img/001.png 
../img/002.png 
../img/003.png 
../img/004.png 
... 
../img/0001.png 
../img/0002.png 
../img/0003.png 
../img/0004.png 
... 

Ahora realizadas con más de 4 mil millones de peticiones HTTP de tu navegador para los archivos que en su mayoría no están allí, y es todavía ni siquiera se dieron en a letras o signos de puntuación al construir los posibles nombres de archivos que podrían existir en el servidor. Esta no es una forma factible de que el archivo de manifiesto funcione. El servidor es donde se conocen los archivos en el directorio img, por lo que es en el servidor donde debe compilarse la lista de archivos.

+1

Bueno, cuando el navegador hace la solicitud inicial al servidor, solo mira el directorio de imágenes públicamente disponible y hace una lista de directorios en ese directorio. Eso devolverá una lista de archivos que puede ver. Luego descarga al navegador/cliente solo los archivos con la extensión .png. No hay necesidad de adivinar cómo se llamarían los archivos consultando al servidor desde 0: un billón de posibilidades de nombre de archivo. – zuallauz

+1

@zuallauz Suponiendo que el directorio de imágenes esté disponible públicamente, eso no dice nada diferente de lo que dije: "El servidor es donde se conocen los archivos en el directorio img, por lo que es en el servidor donde se debe construir la lista de archivos ", excepto que no hay un formato estándar para la lista de archivos devuelto por un directorio de imágenes disponible públicamente para que el navegador lo analice, pero hay un estándar para el archivo de manifiesto. – robertc

+7

Sin listas de carpetas/directorios, podría decir "guardar en caché cualquier archivo que se haya cargado en esta solicitud y coincida con la carpeta que he especificado" Así que no cualquier imagen en esa carpeta, sino cualquier imagen a la que se haga referencia. –

3

Sería un gran problema de seguridad si los navegadores pudieran solicitar listas de carpetas, es por eso que Tomcat desactiva esa capacidad por defecto ahora.

Pero, el navegador podría ubicar todas las coincidencias con los comodines a los que hacen referencia las páginas que almacena en caché. Este enfoque seguiría siendo problemático (como, ¿qué pasa con las imágenes que no se usaron inicialmente sino que se configuraron dinámicamente mediante JavaScript, etc., y requeriría que todos los elementos almacenados en la memoria caché no solo se descargaran sino que se analizaran también).

2

Si está intentando automatizar este proceso, en lugar de hacerlo manualmente. Use un script, o como lo hago, uso manifestR. Emitirá su archivo manifest/appcache y todo lo que tiene que hacer es copiar y pegar. Lo he usado con éxito y generalmente solo tengo que hacer algunos cambios.

Además, recomiendo el uso de la cabecera de red con el comodín:

NETWORK: 
* 

Esto permite que todos los activos de otros dominios vinculados a través de JSON, por ejemplo, para descargar en la memoria caché. Creo que este es el único encabezado donde puedes especificar un comodín. Como los otros han dicho aquí, es por razones de seguridad.

+3

Usted está ** ¡Incorrecto! ** Los archivos enumerados en el encabezado de la sección NETWORK en el archivo de manifiesto de la caché son recursos de la lista blanca que requieren una conexión con el servidor. –

0

El manifiesto de caché ahora está en desuso y debe usar encabezados HTML para controlar el almacenamiento en caché.

Por ejemplo:

<meta http-equiv="Cache-control" content="public"> 
  • Pública - puede tener una caché en cachés compartidos públicos.
  • Privado: solo se puede almacenar en la caché privada.
  • Sin caché: no se puede almacenar en caché.
  • Sin tienda: se puede almacenar en caché pero no se puede archivar.
Cuestiones relacionadas