2011-08-22 10 views
9

JavaScriptを使用して、ユーザーのブラウザがgzip形式のコンテンツ(クライアント側で、node.jsなどではない)をサポートしているかどうかを検出できますか?私は、次のエッジケースをサポートしようとしていますユーザのブラウザでgzipがサポートされているかどうかはJavaScriptで検出できますか


が特定のWebアプリケーションにロードできるファイルの多くがあり、むしろ負荷よりも、アプリケーションの実行など、必要に応じてオンデマンドでそれらをロードする方が良いだろうそれらはすべて最初のものです。私は、これらのファイルをS3から遠くのキャッシュの有効期限を使って提供したいと思います。 S3 does not support gzipping files to clients that support it以降、私は各ファイルの2つのバージョンをホストしたいと思います.1つは通常のファイル、もう1つはcontent-typeのファイルをapplication/gzipに設定したものです。もちろん、ブラウザは要求するファイルを知る必要があります。ブラウザがgzipされたコンテンツをサポートしているかどうかをJavaScriptが検出できる場合、ブラウザは正しいファイルを要求できます。

これは可能ですか?

+0

なぜファイル配信にS3を使用していますか?あなたはCLoudFront ..を使うべきです。 – Layke

答えて

15

JavaScriptは使用できませんが、ブラウザはgzip形式のコンテンツをサポートしているかどうかを検出するためにJavascriptを使用できます。

私は上記にコメントしただけで、繰り返しリトライしたいと思いますが、とにかくgzipコンテンツを使用するCloudFrontを使用するべきです。あなたがS3を使用している場合、あなたの質問に答える目的で、CloudFrontを使用したくない理由がない...

このブログ記事は、ブラウザがGzip 。ここで

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

簡単な要約です:

1)小さなgzipで圧縮されたファイル、gzipcheck.js.jgzを作成し、CloudFrontので、それを利用できるようにします。このファイルには、1行のコードを含める必要があります。

gzipEnabled = true; 

2)このファイルをロードして実行するには、次のコードを使用します。おそらく他のJavascriptコードの前にHTML HEADセクションに配置したいと思うでしょう。

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

ファイルがロードされると、ブラウザがgzipをサポートしているかどうかを示すフラグgzipEnabledを設定します。

+4

+1それは良いトリックですが、CloudFrontはコンテンツをgzipしません。起源がgzipされたコンテンツを提供する場合にのみ、gzipされたコンテンツを提供します。 – Paulpro

+2

ここでは、CloudFrontのgzip形式のコンテンツの使用方法について説明します.gzip形式のコンテンツを自動的に配信しないため、S3を使用している場合は、gzip形式のURLをクライアント側で生成する必要があります。 http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html – banjomonster

4

よく混乱しているコンテンツではありません。 AmazonがS3とCloudfrontで自動gzip圧縮を行うことを決定するまで、以下の回避策を使用する必要があります。

  • 通常のバージョンに加えて、gzippedバージョンのファイルを作成してS3にアップロードします。ファイル名がstyle.cssの場合、gzippedバージョンの名前はstyle.css.gzにする必要があります。
  • key = Content-Encoding & value = gzipを付けてファイルにヘッダーを追加します。これは、コンテンツがgzipを使用してエンコードされていることをブラウザが理解するために必要です。 S3 APIやCloudberry、Bucket Explorerなどの一般的なS3ファイルマネージャーツールを使用してヘッダーを追加することができます
  • また、ファイルの正しいContent-Typeヘッダーを追加してください。たとえば、style.cssの場合はContent-Type:text/cssにする必要があります。
  • ウェブページには通常ファイルが含まれています
  • 上記のjavascriptを使用して、ブラウザがgzipエンコードをサポートしているかどうかを検出します。 trueの場合はファイル名を置き換えます。g style.css with style.css.gz
関連する問題