ええ、これはかなり一般的な質問です。Apacheなどの従来のHTTPデーモンから静的ファイルを提供する場合、コンテンツは実際にはオンザフライで圧縮されmod_deflate
、ファイルを透過的にgzipで圧縮し、適切なContent-Encoding
ヘッダーを設定します。
S3からこれを実行する場合は、ファイルをアップロードする前に手動でgzipで圧縮し(通常はのような名前) 、S3オブジェクトに次のようにcool-stylesheet.gz.css
カスタムプロパティを設定する必要があります。Content-Encoding
これは手作業で行うのは面倒な場合があるため、継続的インテグレーションビルドプロセスの一部として実際に自動的に行います。ソース管理のコミット後フックが起動し、いくつかのビルドステップ(これを含む)が実行され、結果のファイルが適切な環境にデプロイされます。
編集:
S3ではなくCloudfrontの問題を説明するつもりだったようです。CloudfrontはCDNであり、エッジの場所にファイルをキャッシュするため、ファイルが変更されたときにファイルの最新バージョンを強制的に再フェッチする必要があります。これを行うには、キャッシュを無効にする方法とファイル名のバージョン管理を使用する方法の2つがあります。
キャッシュの無効化は遅く、非常にコストがかかる可能性があります。1か月あたり最初の1,000件の無効化リクエストの後、その後無効化される10個のファイルごとに1ニッケルの費用がかかります。
より良いオプションは、ファイル名をCloudfrontにプルする前に、一意の識別子を追加してファイル名をバージョン管理することです。通常、ファイルが最後に更新されたときのUnixエポックを使用します。だからcool-stylesheet.gz.css
になりcool-stylesheet_1363872846.gz.css
ます。次に、HTMLドキュメントで通常のように参照します。<link rel="stylesheet" type="text/css" href="cool-stylesheet_1363872846.gz.css">
これにより、ユーザーが更新されたHTMLドキュメントを開いたときに、Cloudfrontが更新されたファイルをオリジンから再フェッチします。
S3に関して前述したように、これも手動で行うのは面倒な作業です。すべてのファイルの名前を変更し、ソースHTMLドキュメント内のそれらへのすべての参照を検索/置換する必要があります。CIビルドプロセスの一部にする方が理にかなっています。ただし、CIサーバーを使用していない場合は、ソースリポジトリのコミットフックを使用してこれを実行できる可能性があります。