2012-09-11 20 views
6

Ho qui un file JavaScript piuttosto grande che voglio incorporare nel mio sito web. Il server HTTP è abbastanza intelligente per GZIP il file prima di consegnarlo al browser.Perché Safari non accetta la compressione GZIP?

Tuttavia, ho provato con Google Chrome e Safari.

Su Chrome, funziona molto bene. 400K scendere compressa a circa 100k:

first

second

MA sulla compressione Safari non funziona:

third

fourth

Il divertente ° ing è, in gz2b.png puoi vedere chiaramente che la codifica del contenuto è impostata su "gzip".


Nota: Ho già letto su un GZIP-Bug in Safari cui i file non possono terminare su ".gz" o Safari non accetterà GZIP. Poiché il mio file non termina con .gz, questo problema non dovrebbe essere un problema.

+0

Le intestazioni delle richieste ricevute in Safari indicano che il contenuto è GZIP e la sua lunghezza è di 119406 byte. Sei sicuro che lo strumento che stai usando ti stia dicendo la verità? – nos

+0

@nos È lo stesso strumento. Sto solo usando l'ispettore web che è integrato in entrambi i browser. – Timo

+0

@nos Avevi ragione. Wireshark mostra chiaramente che il file è molto più piccolo della dimensione originale. Se vuoi pubblicare il tuo commento come risposta, sarò lieto di contrassegnarlo come "la risposta giusta". – Timo

risposta

7

Le intestazioni HTTP inviate a Safari dicono che è compresso (Ha il Content-Encoding: gzip, e si dice che il Content-Length è 119406 byte) - mi fiderei quelli più rispetto al numero grassetto dicendo 430,61 in Web Inspector. Come determina entrambi i numeri nella colonna in alto, non so.

È possibile ottenere la verifica del numero di byte che passa sul filo se si annulla la richiesta HTTP con wireshark.

9

Ho incontrato anche questo problema, mentre cercavo di ottimizzare il tempo di caricamento di un sito Web su iOS7 Safari iPad mobile.

  • codificato = dimensione del file compresso, dai server
  • Decoded = dimensione del file compresso, localmente
  • Trasferiti = dimensioni del file non compresso + headers inviati e ricevuti
  • Content-Length = file inviato compressi, dal server

Safari ha scelto un modo davvero strano di rappresentare questi numeri nel proprio debugger.

1

Questo è un po 'di tempo fa ma mi sono imbattuto in un problema molto simile o forse la fonte di questo problema. Quando si comprime i dati con gzip per Safari come questo:

gzip jquery.min.js 

Vi ritroverete con un jquery.min.js.gz, che non riuscirà in Safari, anche se correttamente specificato come flusso di file gzip codificato ed anche quando rinominato jquery.jgz come menzionato in molte altre discussioni su questo problema. Questo sembra essere perché il nome del file è codificato nel file gzip.

Se si codifica un file gzip come questo:

cat jquery.min.js | gzip > jquery.jgz 

allora si avrà un file che si trova a pochi byte più piccolo e funziona perfettamente con Safari.

Problemi correlati