2011-11-03 24 views
21

Ho molte immagini in una cartella che vengono utilizzate nell'applicazione. Quando si utilizza il manifest della cache, sarebbe più facile la manutenzione se potessi specificare una wild card per caricare tutte le immagini oi file in una determinata directory da memorizzare nella cache.Come si specifica un carattere jolly nel manifest della cache HTML5 per caricare tutte le immagini in una directory?

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 

Questo può essere fatto? Ho provato in alcuni browser con ../img/* ma non sembra funzionare.

+0

** NOTA: ** nel 2017 l'API [Service Worker] (https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers) sta rapidamente sostituendo AppCache e i browser stanno iniziando a ignorare un file '.manifest' - Firefox 44 suggerisce addirittura di utilizzare gli addetti alla manutenzione invece nella console quando trova un file' .manifest'. –

risposta

17

Non penso che funzioni in questo modo. Dovrai specificare tutte le immagini una ad una, o avere un semplice script PHP per scorrere la directory e inviare il file (con l'intestazione corretta text/cache-manifest ovviamente).

+19

In realtà, un carattere jolly funziona ** se ** si consentono elenchi di directory, ad esempio se si naviga su ... mysite.com/img/ e si ottiene un elenco di tutti i file nella directory. Ho trascorso la maggior parte del pomeriggio cercando di capire perché il sito stava lavorando alla mia macchina di sviluppo (che consente elenchi di directory) ma non sul mio server di test (che non consente elenchi). Tuttavia, per ragioni di sicurezza la maggior parte dei server disabilita gli elenchi delle directory .... – JvO

+1

@JvO: Interessante! Non lo sapevo Potresti modificare la mia risposta per includerla? Accetterò la modifica suggerita (ne ricaverai anche un paio di punti: P) –

21

Sarebbe più semplice, ma come funzionerà? Il file manifest è qualcosa che viene analizzato e interpretato nel browser, che non ha una conoscenza speciale dei file sul tuo server oltre a ciò che hai detto. Se il browser vede questo:

../img/*.png 

Qual è la prima immagine il browser dovrebbe richiedere al server? Cominciamo con questi:

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

Ecco tutte le immagini che potrebbero esistere con un nome numerico, fermandosi semi-arbitrariamente a 231-1. Quanti di quei 2 miliardi di file esistono nella tua directory img? Vuoi davvero un browser che effettui tutte quelle richieste solo per ottenere 2 miliardi di 404 secondi? Per completezza il browser sarebbe probabilmente anche voler richiedere tutti gli equivalenti a zero-riempite:

../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 
... 

Ora effettuate più di 4 miliardi di richieste HTTP del browser per i file che per lo più non ci sono, ed è ancora nemmeno salito sul a lettere o punteggiatura nella costruzione dei possibili nomi di file che potrebbero esistere sul server. Questo non è un modo fattibile per far funzionare il file manifest. Il server è dove i file nella directory img sono noti, quindi è sul server che l'elenco dei file deve essere costruito.

+1

Bene, quando il browser fa la richiesta iniziale al server, guarda solo la directory delle immagini disponibile pubblicamente e fa una directory che lo elenca directory. Ciò restituirà un elenco di file che può vedere. Quindi scarica sul browser/client solo i file con estensione .png. Non c'è bisogno di indovinare che cosa i file potrebbero essere chiamati interrogando il server da 0 - una possibilità di trilioni di nomi di file. – zuallauz

+1

@zuallauz Supponendo che la directory delle immagini sia disponibile pubblicamente, non sto dicendo nulla di diverso da quello che ho detto: "Il server è dove sono noti i file nella directory img, quindi è sul server che deve essere costruito l'elenco dei file ", ad eccezione del fatto che non esiste un formato standard per l'elenco dei file restituito da una directory di immagini disponibile pubblicamente per l'analisi da parte del browser, ma esiste uno standard per il file manifest. – robertc

+7

Senza cartella/elenchi di directory, si potrebbe dire "cache qualsiasi file che è stato caricato su questa richiesta e corrisponde alla cartella che ho specificato" Quindi non qualsiasi immagine in quella cartella, ma qualsiasi immagine alla quale la pagina ha fatto riferimento. –

3

Sarebbe un grosso problema di sicurezza se i browser potessero richiedere elenchi di cartelle: ecco perché Tomcat disattiva questa funzionalità per impostazione predefinita.

Ma il browser può individuare tutte le corrispondenze ai caratteri jolly a cui fanno riferimento le pagine che memorizza nella cache. Questo approccio sarebbe comunque problematico (ad esempio, per quanto riguarda le immagini non utilizzate inizialmente ma impostate dinamicamente da JavaScript, ecc. E richiederebbe che tutti gli elementi memorizzati nella cache non solo vengano scaricati ma analizzati).

2

Se si sta tentando di automatizzare questo processo, invece di farlo manualmente. Utilizzare uno script, o come faccio io uso manifestR. Produrrà il file manifest/appcache e tutto ciò che dovrai fare è copiare e incollare. L'ho usato con successo e di solito devo solo apportare alcune modifiche.

Inoltre, mi consiglia di utilizzare l'intestazione di rete con la wild card:

NETWORK: 
* 

In questo modo tutti i beni di altri domini collegati tramite JSON, ad esempio, per scaricare nella cache. Credo che questa sia l'unica intestazione in cui è possibile specificare un carattere jolly. Come hanno detto gli altri qui, è per ragioni di sicurezza.

+3

Sei ** sbagliato! ** I file elencati sotto l'intestazione della sezione NETWORK: nel file manifest della cache sono risorse in elenco bianche che richiedono una connessione al server. –

0

Il manifest della cache è ora deprecato e dovresti utilizzare le intestazioni HTML per controllare la memorizzazione nella cache.

Ad esempio:

<meta http-equiv="Cache-control" content="public"> 
  • pubblico - possono essere memorizzati nella cache cache condivise pubbliche.
  • Private - può essere memorizzato solo nella cache privata.
  • No-Cache - potrebbe non essere memorizzato nella cache.
  • No-Store - può essere memorizzato nella cache ma non archiviato.