数週間前、Amazonはコンテンツの有効期限を短縮したと発表しました。
AmazonCloudFrontが最小コンテンツ有効期限を短縮
CloudFrontのTTLを実際に0に設定できるほどです。私の質問は、TTLを0に設定したCloudFrontディストリビューションがあると便利な理由です。これは、キャッシュがまったくないことを意味するため、CloudFrontに到達するすべてのリクエスト原点にぶつかってしまいます。
何が足りないのですか?
数週間前、Amazonはコンテンツの有効期限を短縮したと発表しました。
AmazonCloudFrontが最小コンテンツ有効期限を短縮
CloudFrontのTTLを実際に0に設定できるほどです。私の質問は、TTLを0に設定したCloudFrontディストリビューションがあると便利な理由です。これは、キャッシュがまったくないことを意味するため、CloudFrontに到達するすべてのリクエスト原点にぶつかってしまいます。
何が足りないのですか?
回答:
Amazon CloudFrontのこの新機能は、実際には多くのユースケースで非常に役立ちます。これは、オリジンをヒットすることは、一見したときとは少し異なる動作をし、逆に必ずしも問題ではないためです。この機能はすでに以前にリリースされていますが、Amazon CloudFrontの最近のリリース(動的コンテンツのサポート)と一緒に提供されます。
可変存続可能時間(TTL) -多くの場合、動的コンテンツはキャッシュできないか、非常に短い期間(おそらく数秒)だけキャッシュできます。以前は、すべてのコンテンツが静的であると見なされていたため、CloudFrontの最小TTLは60分でした。新しい最小TTL値は0秒です。特定のオリジンのTTLを0に設定した場合でも、CloudFrontはそのオリジンからのコンテンツをキャッシュします。次に、If-Modified-Sinceヘッダーを使用してGETリクエストを行います。これにより、オリジンで変更されていない場合、CloudFrontがキャッシュされたコンテンツを引き続き使用できることをオリジンに通知する機会が与えられます。[私の強調]
つまり、TTL 0を使用するということは、主にCloudFrontがキャッシュ制御の権限をオリジンに委任することを意味します。つまり、オリジンサーバーは、CloudFrontがオブジェクトをキャッシュするかどうか、およびキャッシュする期間を決定します。特に、If-Modified-Sinceヘッダーを含むGETリクエストは、オブジェクト自体がオリジンから取得されることを必ずしも意味するわけではなく、オリジンはHTTPステータスコード304を返すことができます(そして返す必要があります)-該当する場合は変更されません:
最後に要求されてからリソースが変更されていないことを示します。[...] これを使用すると、サーバーによって再処理されるページ全体と比較してヘッダーデータのみを送受信する必要があり、より多くの帯域幅を使用して再送信されるため、サーバーとクライアントの両方で帯域幅と再処理が節約されます。サーバーとクライアントの。 [私の強調]
HTTPアーキテクチャの非常に重要で効果的な部分であるHTTPキャッシュ制御の仕組みと利点の詳細については、MarkNottinghamの優れたキャッシングチュートリアルを参照してください。
これらすべての部分がどのように連携するかを理解するのは確かに少し難しい場合があります。したがって、「CloudFrontがCloudFrontエッジキャッシュにとどまる時間の指定(オブジェクトの有効期限)」内のダウンロードディストリビューション用にCloudFrontがオブジェクトをキャッシュする最小時間の指定の表は、効果を要約しようとします特にTTL = 0の有無にかかわらずCloudFrontのコンテキストで適用された場合。
Amazonは「TTLは0」ではなく、「最小TTLは0」であることに注意してください。それは非常に異なります。上記の説明は非常に望ましいものですが、Cloudfrontが実際にそれを行うという保証はありません。
今の私の経験では、キャッシュされた画像がエッジに数分間留まっているのを見ることができますが、私の原点はすでに変更されています。
したがって、「最小TTLが0である」と言うのは、おそらく「Amazonはこれをキャッシュに保持するという厳密な意図はない」、おそらく「頻繁に再フェッチする」のようなものだと思います。
Webユーザーが新しいコンテンツを投稿しているCMSのようなアプリケーションの場合、TTL-0ではまだ十分ではないと思います。それでも、CMSから無効化を呼び出すか、バージョン番号ごとに異なるパスを使用する必要があります。
CloudFrontを証明書マネージャーと組み合わせて使用すると、S3WebサイトにHTTPSサポートを追加できます。これが必要かもしれませんが、キャッシュはありません。
これの別のユースケースは、ラムダエッジhttps://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edgeを使用して、キャッシュ不可能なコンテンツのリクエストのヘッダーを操作する場合です。 html。例x-api-key
。