11

S3バケットでホストされる静的Webサイトを作成しました。私のアセットファイル(cssおよびjsファイル)はgzipで縮小および圧縮されています。ファイル名自体はまたはであり、ヘッダー 付きで配信されfile_gz.jsます。file_gz.cssContent-Encoding: gzip

これまで、さまざまなブラウザでWebサイトをテストしてきましたが、正常に動作します。アセットは圧縮バージョンで提供され、ページの外観に違いはありません。

私が見る唯一の問題は、これはS3バケットであるため、クライアント(ブラウザー)がgzipエンコーディングをサポートしていない場合のフェイルセーフがないことです。代わりに、HTTPリクエストは失敗し、ページにスタイル設定やjavascript拡張機能は適用されません。

設定して問題を知っている人はいますContent-Encoding: gzipか?すべてのブラウザがこれを適切にサポートしていますか?これを正しく機能させるために追加する必要のあるヘッダーは他にありますか?

4

2 に答える 2

13

最新のブラウザは、エンコードされたコンテンツをほぼ全面的にサポートしています。ただし、すべてのユーザーエージェントがそうすると想定するのは安全ではありません。実装の問題は、この問題を回避するためのHTTPの組み込みメソッドであるコンテンツネゴシエーションを完全に無視することです。いくつかのオプションがあります。

  1. 引き続き問題に目を閉じて、コンテンツにアクセスするすべてのユーザーエージェントがgzipリソースをデコードできるようになることを期待できます。残念ながら、これはほぼ確実に当てはまりません。そこにあるユーザーエージェントはブラウザだけではなく、問題解決への「真っ向から」のアプローチが良い考えになることはめったにありません。

  2. Accept-Encodingヘッダーを使用してgzip圧縮された応答を提供するかどうかをネゴシエートするソリューションを実装します。クライアントがこのヘッダーをまったく指定していないか、指定しているがgzipについて言及していない場合、ユーザーがgzip圧縮された応答をデコードできないことをかなり確信で​​きます。そのような場合は、非圧縮バージョンを送信する必要があります。

コンテンツネゴシエーションの詳細は、この回答の範囲を超えています。Accept-Encodingヘッダーを解析し、応答のエンコードをネゴシエートする方法について調査する必要があります。通常、コンテンツエンコーディングは、Apacheのmod_deflateなどのサードパーティモジュールを使用して実行されます。私はこの分野でのS3のオプションに精通していませんが、ネゴシエーションを自分で実装する必要があると思います。

要約すると、最初にクライアントでクリアせずにエンコードされたコンテンツを送信することは、あまり良い考えではありません。

于 2012-08-28T15:52:22.763 に答える
1
  1. CSS / minfied CSS(example.css[247 kb])をお持ちですか。
  2. cmdgzip -9 example.cssを使用すると、隠しファイルはexample.css.gz[44kb]のようになります。
  3. ファイルの名前をに変更しexample.css.gzますexample.css
  4. ファイルをS3バケットにアップロードし、プロパティで[メタデータ]をクリックします。
  5. 新しいメタデータタグを追加し、値を選択Context-Encoding して値を付けますgzip
  6. これで、CSSが縮小され、gzipも実行されます。

ソース: http: //www.rightbrainnetworks.com/blog/serving-compressed-gzipped-static-files-from-amazon-s3-or-cloudfront/

于 2016-01-22T08:33:20.593 に答える