2011-08-22 19 views
9

Posso usare JavaScript per rilevare se il browser dell'utente supporta il contenuto gzip (lato client, non node.js o simile)?È possibile rilevare JavaScript se il browser dell'utente supporta gzip?

Sto cercando di supportare il seguente caso limite:
Esistono molti file che possono essere caricati su una particolare app Web e sarebbe preferibile caricarli su richiesta, se necessario, in quanto l'applicazione viene eseguita anziché caricata tutti loro inizialmente Voglio servire questi file al di fuori di S3 con una data di scadenza della cache di gran lunga futura. Dal S3 does not support gzipping files to clients that support it, voglio ospitare due versioni di ciascun file: una normale e una compressa con content-type impostata su application/gzip. Il browser ha ovviamente bisogno di sapere quali file richiedere. Se JavaScript è in grado di rilevare se il browser supporta il contenuto gzip, il browser sarà in grado di richiedere i file corretti.

È possibile?

+0

Perché stai utilizzando S3 per la consegna dei file. Dovresti usare CLoudFront .. che lo fa. – Layke

risposta

15

Javascript non può, ma è possibile utilizzare Javascript per rilevare se il browser supporta o meno il contenuto gzip.

Ho commentato sopra e vorrei solo reiterrare, si dovrebbe comunque utilizzare CloudFront, che fa il contenuto gzip. Se si utilizza S3, tuttavia non vi è alcun motivo per cui non si desidera utilizzare CloudFront, tuttavia, al fine di rispondere alla domanda ...

Questo post del blog si rivolge perfettamente a come si rileva se il browser supporta Gzip .

http://blog.kenweiner.com/2009/08/serving-gzipped-javascript-files-from.html

Ecco un breve riassunto:

1) Creare un piccolo file compresso con gzip, gzipcheck.js.jgz, e renderlo disponibile in CloudFront. Questo file deve contenere una riga di codice:

gzipEnabled = true; 

2) Utilizzare il seguente codice per tentare di caricare ed eseguire questo file. Probabilmente vorrai inserirlo nella sezione HTML HEAD prima di qualsiasi altro codice Javascript.

<script type="text/javascript" src="gzipcheck.js.jgz"> 
</script> 

Se i carichi di file, si imposta un flag, gzipEnabled, che indica se il browser supporta gzip.

+4

+1 Questo è un buon trucco, ma CloudFront non gzip il contenuto. Servirà contenuti compressi solo se l'origine serve contenuti compressi. – Paulpro

+2

Ecco le istruzioni di CloudFront per l'utilizzo del contenuto con gzip - e non servono automaticamente il contenuto gzip, se si utilizza S3 l'URL per la versione gzip deve essere generato sul lato client. http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html – banjomonster

4

Ben cloudfront non gzip automaticamente il contenuto. Fino a quando Amazon deciderà di eseguire la compressione gzip automatica in S3 e Cloudfront, è necessario utilizzare la soluzione alternativa di seguito.

  • Oltre alla versione normale, creare una versione compressa del file e caricarla su S3. Se il nome del file è style.css, la versione con gzip deve essere denominata style.css.gz.
  • Aggiungere un'intestazione al file con key = Content-Encoding & value = gzip nel file. Questo è necessario in modo che i browser capiscano che il contenuto è codificato usando gzip. L'intestazione può essere aggiunta utilizzando S3 api o i popolari strumenti di gestione file S3 come Cloudberry, Bucket Explorer, ecc.
  • Inoltre, aggiungere l'intestazione Content-Type corretta per il file. ad esempio per style.css dovrebbe essere Content-Type: text/css.
  • Nella pagina Web includere il file normalmente
  • Utilizzare il javascript sopra indicato per rilevare se il browser supporta la codifica gzip. Se trovato vero, sostituire il nome del file e.g style.css con style.css.gz
Problemi correlati