私たちは大規模なウェブサイトを開発しており、すべての画像とリソースは Amazon S3 にあります。また、コンテンツをグローバルに配信するために Cloudfront を使用しています。私たちがしたいことは、クライアントの Web ブラウザーにファイルをキャッシュするように指示することです。これは、ファイルを変更すると URL も変更されるためです (Cloudfront は他の場所で 24 時間変更を反映しません)。
現在ETagを使用していますが、リソースが変更されたかどうかを確認するためにクライアントがリクエストを実行する必要があるため、これは最適ではありません。
解決策の 1 つは Expires ヘッダーですが、S3 の Apache 構成で可能なように現在の日付に相対的に設定する方法が見つかりませんでした。また、すべてのコンテンツを定期的に更新することはできません。そのため、Expires ヘッダーをすべてのコンテンツの現在の日付に関連する日付に設定する構成オプションが必要になります。
別の解決策は、Cache-Control: max-age を特定の値に設定することです。これは機能しますか?主要なブラウザで受け入れられますか? これでいくつかのキャッシュアルゴリズムを破棄しますか? YSlow が Cache-Control: max-age ではなく Expires ヘッダーを設定することを推奨するのはなぜですか?
他の推奨事項はありますか?CSS と JS を圧縮し、可能な場合はスプライトを使用し、可能な場合は Expires ヘッダーと ETag を設定します。まもなく、Yahoo Compression Tool と gzipping 出力を使用して画像を圧縮します。