Googleでいくつかのページにアクセスして、個々のオブジェクトにS3のヘッダーを設定できます。私の場合はいくつかのオブジェクトについて話しているので、それは特別にそれを行うための生産的な方法ではありません。
まあ、「生産的」であるかどうかは、それが実際に動作するように設計されている方法です。
CloudFrontはヘッダーを追加 しませんCache-Control:
。
CloudFrontのは、通過 (特に構成しない限り、また点)Cache-Control:
、この場合、S3であるオリジンサーバによって提供ヘッダー。
Cache-Control:
オブジェクトの取得時にS3が提供するヘッダーを取得するには、オブジェクトがS3にアップロードされるか、後続のput + copy操作によってオブジェクトのメタデータに追加されるときにヘッダーを提供する必要があります。 S3、プロセスのメタデータを変更します。これは、オブジェクトメタデータを編集した場合に、舞台裏でコンソールが行うことです。
また、S3には、バケット内のすべてのオブジェクトにこれらのヘッダーを強制的に返すグローバル設定はありません(これは不思議な場合です)。これはオブジェクトごとの属性です。
更新: Lambda @ EdgeはCloudFrontの新機能であり、ビューアーとキャッシュの間、および/またはキャッシュとオリジンの間で、単純なリクエスト/レスポンスオブジェクト構造に対してNode.jsで記述されたコードを実行して、リクエストおよび/またはレスポンスに対してトリガーを起動できますCloudFrontによって公開されます。
この機能の主なアプリケーションの1つはヘッダーの操作です...そのため、上記はまだ正確ですが(CloudFront自体は追加しません)Cache-Control
、CloudFrontから返される応答にLambda関数を追加することが可能になりました。
この例は、応答にヘッダーが既に存在しCache-Control: public, max-age=86400
ない場合にのみ追加されますCache-Control
。
Origin Responseトリガーでこのコードを使用すると、CloudFrontがオリジンからオブジェクトをフェッチするたびにトリガーされ、CloudFrontがキャッシュする前にレスポンスを変更します。
'use strict';
exports.handler = (event, context, callback) => {
const response = event.Records[0].cf.response;
if(!response.headers['cache-control'])
{
response.headers['cache-control'] = [{
key: 'Cache-Control',
value: 'public, max-age=86400'
}];
}
callback(null, response);
};
更新(2018-06-20):最近、機能リクエストをCloudFrontチームに送信して、静的リクエストヘッダーを追加できる方法と同様に、静的オリジンレスポンスヘッダーをオリジン属性として設定できるようになりました...ツイスト、各ヘッダーを条件付きで追加するように設定できるようにする(オリジンが応答でそのヘッダーを提供しなかった場合のみ)または無条件で追加する(ヘッダーを追加し、存在する場合はそのオリジンからヘッダーを上書きする)
機能のリクエストでは、通常、彼らが実際に新しい機能の実装を検討しているかどうかの確認を受け取りません...または、すでに機能していたかもしれないかどうかさえ...完了時に発表されます。したがって、これらが実装されるかどうかはわかりません。この機能はLambda @ Edgeを介して既に利用可能であるため、基本機能には必要ないという議論があります...しかし、私の反論は、基本機能は機能なしでは機能完全ではないということですシンプルで静的な応答ヘッダー操作を実行し、これがトリガーが必要な唯一の理由である場合、Lambdaトリガーを必要とすることは不必要なコストであり、財政的および追加のレイテンシーです(どちらも必ずしも異常なコストではありませんが)。