メニュー
Amazon CloudFront
開発者ガイド (API Version 2016-09-29)

カスタムオリジンの場合のリクエストとレスポンスの動作

CloudFront がリクエストを処理してカスタムオリジンサーバーに転送する方法

CloudFront がビューワーリクエストを処理してカスタムオリジンに転送する方法については、該当するトピックを参照してください。

認証

DELETEGETHEADPATCHPOSTPUT リクエストの場合、Authorization ヘッダーをオリジンに転送するように CloudFront を設定すると、クライアント認証を要求するようにオリジンサーバーを設定できます。

OPTIONS リクエストの場合、次の CloudFront 設定を使用した場合のみ、クライアント認証を要求するようにオリジンサーバーを設定することができます。

  • Authorization ヘッダーをオリジンに転送するように CloudFront を設定

  • OPTIONS リクエストへの応答をキャッシュしないように CloudFront を設定

HTTP または HTTPS のいずれかを使用してオリジンにリクエストを転送するように CloudFront を構成することができます。詳細については、「CloudFront で HTTPS を使用する」を参照してください。

キャッシュ期間および最小 TTL

ウェブディストリビューションでは、CloudFront が別のリクエストをオリジンに転送するまでにオブジェクトを CloudFront キャッシュに保持する時間を制御できます。これを行うには、次の手順を実行します。

  • Cache-Control または Expires ヘッダーフィールドを各オブジェクトに追加するようにオリジンを構成します。

  • CloudFront キャッシュ動作で、最小 TTL の値を指定します。

  • デフォルト値の 24 時間を使用します。

詳細については、「CloudFront エッジキャッシュにオブジェクトを保持する時間の指定(有効期限切れ)」を参照してください。

クライアント IP アドレス

ビューワーがリクエストを CloudFront に送信し、X-Forwarded-For リクエストヘッダーを含めない場合、CloudFront は TCP 接続からビューワーの IP アドレスを取得して、IP アドレスが含まれた X-Forwarded-For ヘッダーを追加し、リクエストをオリジンに転送します。たとえば、CloudFront が TCP 接続から IP アドレス 192.0.2.2 を取得する場合、以下のヘッダーをオリジンに転送します。

X-Forwarded-For: 192.0.2.2

ビューワーがリクエストを CloudFront に転送して X-Forwarded-For リクエストヘッダーを含める場合、CloudFront はビューワーの IP アドレスを TCP 接続から取得してそれを X-Forwarded-For ヘッダーの末尾に追加し、リクエストをオリジンに転送します。たとえば、ビューワーのリクエストに X-Forwarded-For: 192.0.2.4,192.0.2.3 が含まれ、CloudFront が TCP 接続から IP アドレス 192.0.2.2 を取得する場合、以下のヘッダーをオリジンに転送します。

X-Forwarded-For: 192.0.2.4,192.0.2.3,192.0.2.2

ロードバランサー (Elastic Load Balancing を含む)、Web アプリケーションファイアウォール、リバースプロキシ、侵入防御システム、API ゲートウェイなどの一部のアプリケーションでは、リクエストを転送した CloudFront エッジサーバーの IP アドレスが X-Forwarded-For ヘッダーの末尾に付加されます。たとえば、CloudFront から ELB に転送するリクエストに X-Forwarded-For: 192.0.2.2 が含まれていて、CloudFront エッジサーバーの IP アドレスが 192.0.2.199 である場合、EC2 インスタンスで受け取るリクエストのヘッダーは次のようになります。

X-Forwarded-For: 192.0.2.2,192.0.2.199

注記

X-Forwarded-For ヘッダーには、必要に応じて IPv4 アドレス (192.0.2.44 など) および IPv6 アドレス (2001:0db8:85a3:0000:0000:8a2e:0370:7334 など) が含まれます。

クライアント側の SSL 認証

CloudFront はクライアント側の SSL 証明書を使用したクライアント認証をサポートしていません。オリジンがクライアント側証明書をリクエストした場合、CloudFront はリクエストを削除します。

圧縮

CloudFront は、"identity" および "gzip"Accept-Encoding フィールド値を持つリクエストを転送します。詳細については、「圧縮ファイルの供給」を参照してください。

条件付きリクエスト

CloudFront は、エッジキャッシュで有効期限切れになっているオブジェクトに対するリクエストを受け取ると、リクエストをオリジンに転送し、オブジェクトの最新バージョンを取得するか、CloudFront エッジキャッシュに最新バージョンがすでに存在することをオリジンに確認します。通常、オリジンはオブジェクトを CloudFront に最後に送信するときに、ETag 値または LastModified 値、あるいはその両方の値をレスポンスに含めます。CloudFront は、CloudFront がオリジンに転送する新しいリクエストには、次のどちらかまたは両方を追加します。

  • オブジェクトの有効期限切れバージョンの ETag 値が含まれる If-Match または If-None-Match ヘッダー。

  • オブジェクトの有効期限切れバージョンの LastModified 値が含まれる If-Modified-Since ヘッダー。

オリジンは、この情報を使用して、オブジェクトが更新されているかどうかを判別します。つまり、オブジェクト全体を CloudFront に返すか、または HTTP 304 ステータスコード (変更なし) のみを返すかを判別します。

Cookie

Cookie をオリジンに転送するように CloudFront を構成できます。詳細については、「Cookie に基づいてオブジェクトをキャッシュするように CloudFront を設定する」を参照してください。

Cross-Origin Resource Sharing (CORS)

CloudFront で Cross-Origin Resource Sharing 設定を尊重する場合は、Origin ヘッダーをオリジンに転送するように CloudFront を設定します。詳細については、「リクエストヘッダーに基づいてオブジェクトをキャッシュするように CloudFront を設定する」を参照してください。

暗号化

HTTPS を使用してリクエストを CloudFront に送信するようにビューワーに要求し、ビューワーが使用しているプロトコルを使用してカスタムオリジンにリクエストを転送するように CloudFront に要求することもできます。詳細については、次のディストリビューション設定を参照してください。

CloudFront は、SSLv3、TLSv1.0、および TLSv1.2 プロトコルを使用して、HTTPS リクエストをオリジンサーバーに転送します。カスタムオリジンでは、オリジンと通信する際に CloudFront が使用する SSL プロトコルを選択できます。

オリジンが Amazon S3 バケットの CloudFront である場合は、TLSv1.2 を必ず使用します。

重要

SSL と TLS のその他のバージョンはサポートされていません。

CloudFront での HTTPS の使用の詳細については、CloudFront で HTTPS を使用するを参照してください。ビューワーと CloudFront との間、および CloudFront とオリジンとの間の HTTPS 通信で CloudFront がサポートする暗号のリストについては、ビューアと CloudFront 間の通信用にサポートされる SSL/TLS プロトコル を参照してください。

GET リクエストに本文が含まれている

ビューワー GET のリクエストの本文が含まれている場合、CloudFront はビューワーに HTTP ステータスコード 403 (禁止) を返します。

HTTP メソッド

サポートするすべての HTTP メソッドを処理するよう CloudFront を構成すると、CloudFront はビューワーからの以下のリクエストを受け入れてカスタムオリジンに転送します。

  • DELETE

  • GET

  • HEAD

  • OPTIONS

  • PATCH

  • POST

  • PUT

CloudFront は、GET リクエストと HEAD リクエストへの応答を常にキャッシュします。OPTIONS リクエストへの応答をキャッシュするように CloudFront を設定することもできます。CloudFront はその他のメソッドを使用するリクエストへのレスポンスをキャッシュしません。

カスタムオリジンが上記のメソッドを処理するかどうかを構成する方法の詳細については、オリジンのドキュメントを参照してください。

重要

CloudFront がサポートするすべての HTTP メソッドを受け入れてオリジンに転送するように CloudFront を構成する場合、オリジンサーバーがすべてのメソッドを処理するように構成します。たとえば、POST を使用したいので、上記のメソッドを受け入れて転送するように CloudFront を構成する場合は、削除すべきでないリソースをビューワーが削除できないようにするために、DELETE リクエストを適切に処理するようオリジンサーバーを構成する必要があります。詳細については、HTTP サーバーのドキュメントを参照してください。

HTTP リクエストヘッダーと CloudFront の動作

次の表は HTTP リクエストヘッダーを列挙し、ヘッダーごとに以下の項目について説明しています。

  • ヘッダーをオリジンに転送するように CloudFront を設定していない場合の CloudFront の動作。この場合、CloudFront はヘッダー値に基づいてオブジェクトをキャッシュします。

  • そのヘッダーの値に基づいてオブジェクトをキャッシュするように CloudFront を設定できるかどうか。

    Date および User-Agent ヘッダーの値に基づいてオブジェクトをキャッシュするように CloudFront を設定できますが、これはお勧めできません。これらのヘッダーには可能な値が多数あり、その値に基づいてキャッシュすると、CloudFront がオリジンに転送するリクエストの数が大幅に増加します。

ヘッダー値に基づくキャッシュの詳細については、「リクエストヘッダーに基づいてオブジェクトをキャッシュするように CloudFront を設定する」を参照してください。

ヘッダー ヘッダー値に基づいてキャッシュするように CloudFront を設定しない場合の動作 ヘッダー値に基づくキャッシュがサポートされている

他の定義されたヘッダー

CloudFront はヘッダーをオリジンに転送します。

はい

Accept

CloudFront はヘッダーを削除します。

はい

Accept-Charset

CloudFront はヘッダーを削除します。

はい

Accept-Encoding

値が gzip を含む場合、CloudFront は Accept-Encoding: gzip をオリジンに転送します。

値が gzip含まない場合、CloudFront はリクエストをオリジンに転送する前に Accept-Encoding ヘッダーフィールドを削除します。

いいえ

Accept-Language

CloudFront はヘッダーを削除します。

はい

Authorization

  • GETHEAD の各リクエスト – CloudFront は、リクエストをオリジンに転送する前に Authorization ヘッダーフィールドを削除します。

  • OPTIONS リクエスト – OPTIONS リクエストへの応答をキャッシュするように CloudFront を設定した場合、CloudFront は、リクエストをオリジンに転送する前に、Authorization ヘッダーフィールドを削除します。

    OPTIONS リクエストへの応答をキャッシュするように CloudFront を設定しなかった場合、CloudFront は、Authorization ヘッダーフィールドをオリジンに転送します。

  • DELETEPATCHPOSTPUT の各リクエスト – CloudFront は、リクエストをオリジンに転送する前にヘッダーフィールドを削除しません。

はい

Cache-Control

CloudFront はヘッダーをオリジンに転送します。

いいえ

CloudFront-Forwarded-Proto

CloudFront は、リクエストをオリジンに転送する前にヘッダーを追加しません。

詳細については、「リクエストのプロトコルに基づいてオブジェクトをキャッシュするように CloudFront を設定する」を参照してください。

はい

CloudFront-Is-Desktop-Viewer

CloudFront は、リクエストをオリジンに転送する前にヘッダーを追加しません。

詳細については、「デバイスタイプに基づいてオブジェクトをキャッシュするように CloudFront を設定する」を参照してください。

はい

CloudFront-Is-Mobile-Viewer

CloudFront は、リクエストをオリジンに転送する前にヘッダーを追加しません。

詳細については、「デバイスタイプに基づいてオブジェクトをキャッシュするように CloudFront を設定する」を参照してください。

はい

CloudFront-Is-Tablet-Viewer

CloudFront は、リクエストをオリジンに転送する前にヘッダーを追加しません。

詳細については、「デバイスタイプに基づいてオブジェクトをキャッシュするように CloudFront を設定する」を参照してください。

はい

CloudFront-Viewer-Country

CloudFront は、リクエストをオリジンに転送する前にヘッダーを追加しません。

はい

Connection

CloudFront は、オリジンにリクエストを転送する前に、このヘッダーを Connection: Keep-Alive ヘッダーに置き換えます。

いいえ

Content-Length

CloudFront はヘッダーをオリジンに転送します。

いいえ

Content-MD5

CloudFront はヘッダーをオリジンに転送します。

はい

Content-Type

CloudFront はヘッダーをオリジンに転送します。

はい

Cookie

Cookie を転送するように CloudFront を設定している場合、Cookie ヘッダーフィールドがオリジンに転送されます。そうでない場合、CloudFront は Cookie ヘッダーフィールドを削除します。詳細については、「Cookie に基づいてオブジェクトをキャッシュするように CloudFront を設定する」を参照してください。

いいえ

Date

CloudFront はヘッダーをオリジンに転送します。

はい、ただし推奨されません

Expect

CloudFront はヘッダーを削除します。

はい

From

CloudFront はヘッダーをオリジンに転送します。

はい

Host

CloudFront は、リクエストされたオブジェクトに関連付けられたオリジンのドメイン名に値を設定します。

はい

If-Match

CloudFront はヘッダーをオリジンに転送します。

はい

If-Modified-Since

CloudFront はヘッダーをオリジンに転送します。

はい

If-None-Match

CloudFront はヘッダーをオリジンに転送します。

はい

If-Range

CloudFront はヘッダーをオリジンに転送します。

はい

If-Unmodified-Since

CloudFront はヘッダーをオリジンに転送します。

はい

Max-Forwards

CloudFront はヘッダーをオリジンに転送します。

いいえ

Origin

CloudFront はヘッダーをオリジンに転送します。

はい

Pragma

CloudFront はヘッダーをオリジンに転送します。

いいえ

Proxy-Authenticate

CloudFront はヘッダーを削除します。

いいえ

Proxy-Authorization

CloudFront はヘッダーを削除します。

いいえ

Proxy-Connection

CloudFront はヘッダーを削除します。

いいえ

Range

CloudFront はヘッダーをオリジンに転送します。詳細については、「CloudFront がオブジェクトの部分的リクエスト (レンジ GET) を処理する方法」を参照してください。

はい (デフォルト)

Referer

CloudFront はヘッダーを削除します。

はい

Request-Range

CloudFront はヘッダーをオリジンに転送します。

いいえ

TE

CloudFront はヘッダーを削除します。

いいえ

Trailer

CloudFront はヘッダーを削除します。

いいえ

Transfer-Encoding

CloudFront はヘッダーをオリジンに転送します。

いいえ

Upgrade

CloudFront はヘッダーを削除します。

いいえ

User-Agent

CloudFront はこのヘッダーフィールドの値を Amazon CloudFront に置き換えます。ユーザーが使用しているデバイスに基づいて CloudFront でコンテンツをキャッシュする場合は、「デバイスタイプに基づいてオブジェクトをキャッシュするように CloudFront を設定する」を参照してください。

はい、ただし推奨されません

Via

CloudFront はヘッダーをオリジンに転送します。

はい

Warning

CloudFront はヘッダーをオリジンに転送します。

はい

X-Amz-Cf-Id

CloudFront は、ビューワーリクエストをオリジンに転送する前に、ヘッダーをリクエストに追加します。ヘッダー値には、リクエストを一意に識別する暗号化された文字列が含められます。

いいえ

X-Edge-*

CloudFront はすべての X-Edge-* ヘッダーを削除します。

いいえ

X-Forwarded-For

CloudFront はヘッダーをオリジンに転送します。詳細については、「クライアント IP アドレス」を参照してください。

はい

X-Forwarded-Proto

CloudFront はヘッダーを削除します。

はい

X-Real-IP

CloudFront はヘッダーを削除します。

いいえ

HTTP バージョン

CloudFront は HTTP/1.1 を使用してカスタムオリジンにリクエストを転送します。

リクエストの最大長と URL の最大長

パス、クエリ文字列 (ある場合)、ヘッダーを含め、リクエストの最大長は 20480 バイトです。

CloudFront はリクエストから URL を構築します。この URL の最大長は 8192 文字です。

リクエストまたは URL がこの制限を超えると、CloudFront は、リクエストヘッダーフィールドが長すぎることを示す HTTP ステータスコード 413 (Request Header Fields Too Large) をビューワーに返してから、ビューワーへの TCP 接続を終了します。

OCSP Stapling

オブジェクトに対する HTTPS リクエストをビューワーが送信する際には、ドメインの SSL 証明書が無効になっていないことを CloudFront またはビューワーが認証機関 (CA) に対して確認する必要があります。OCSP Stapling を使用すると、CloudFront で証明書を検証して CA からの応答をキャッシュできるため、クライアントが直接 CA に対して証明書を検証する必要がなくなり、証明書の検証速度が向上します。

同一ドメイン内のオブジェクトに対する多数の HTTPS リクエストを CloudFront が受信した場合は、OCSP Stapling によるパフォーマンス向上がさらに顕著になります。CloudFront エッジロケーション内の各サーバーは、別々の検証リクエストを送信する必要があります。同一ドメインに対する多数の HTTPS リクエストを CloudFront が受信するとすぐに、エッジロケーション内のすべてのサーバーが、SSL ハンドシェイクでパケットに "ステープリング" できるという CA からの応答を受信します。証明書が有効であることをビューワーが確認すると、CloudFront はリクエストされたオブジェクトを提供できます。CloudFront エッジロケーション内でディストリビューションが十分なトラフィックを確保できない場合、新しいリクエストは、CA に対して証明書がまだ検証されていないサーバーに誘導される可能性が高くなります。この場合は、ビューワーが検証ステップを別途実行し、CloudFront サーバーがオブジェクトを提供します。この CloudFront サーバーも CA に検証リクエストを送信するため、同じドメイン名が含まれるリクエストを次に受信したときには、CA からの検証応答が既に存在しているということになります。

持続的接続

CloudFront がオリジンからレスポンスを取得すると、その期間中に別のリクエストが届くのに備え、数秒間、接続を維持しようとします。持続的接続を維持すると、TCP 接続の再構築に必要な時間と後続のリクエストに対する別の TLS ハンドシェイクの実行に必要な時間を節約できます。

持続的接続の期間を設定する方法など、詳細については、「ウェブディストリビューションを作成または更新する場合に指定する値」セクションの「オリジンのキープアライブタイムアウト (Amazon EC2、Elastic Load Balancing、および他のカスタムオリジンのみ)」を参照してください。

プロトコル

CloudFront は、以下の項目に基づいて、HTTP または HTTPS リクエストをオリジンサーバーに転送します。

  • ビューワーが CloudFront に送信したリクエストのプロトコル (HTTP または HTTPS)。

  • CloudFront コンソールの [Origin Protocol Policy] フィールドの値。または、CloudFront API を使用する場合は、DistributionConfig 複合型の OriginProtocolPolicy エレメントの値。CloudFront コンソールで使用できるオプションは、[HTTP Only]、[HTTPS Only]、および [Match Viewer] です。

[HTTP Only] または [HTTPS Only] を指定すると、CloudFront では、ビューアリクエストのプロトコルに関係なく、指定されたプロトコルのみを使用してリクエストがオリジンサーバーに転送されます。

[Match Viewer] を指定した場合、CloudFront はビューワーリクエストのプロトコルを使用してリクエストをオリジンサーバーに転送します。ビューワーが HTTP と HTTPS の両方のプロトコルを使用してリクエストを行った場合も、CloudFront がオブジェクトをキャッシュするのは 1 回だけです。

重要

CloudFront が HTTPS プロトコルを使用してリクエストをオリジンに転送し、オリジンサーバーから無効な証明書または自己署名証明書が返された場合、CloudFront は TCP 接続を中断します。

CloudFront コンソールを使用してディストリビューションを更新する方法については、「CloudFront ディストリビューションの一覧表示、詳細表示、および更新を行う」を参照してください。CloudFront API を使用してディストリビューションを更新する方法については、「Amazon CloudFront API リファレンス」の「PUT Distribution Config」を参照してください。

クエリ文字列

CloudFront でクエリ文字列パラメータをオリジンに転送するかどうかを構成できます。詳細については、「クエリ文字列パラメータに基づいてキャッシュするように CloudFront を設定する」を参照してください。

オリジン応答タイムアウト

オリジン応答タイムアウト (オリジンリクエストタイムアウトまたはオリジンの読み取りタイムアウトとも呼ばれます) は、次の両方の値に適用されます。

  • CloudFront がリクエストをカスタムオリジンに転送してからレスポンスを受け取るまでの待機時間 (秒)

  • CloudFront がオリジンからレスポンスのパケットを受け取ってから次のパケットを受け取るまでの待機時間 (秒)

オリジン応答タイムアウトを設定する方法など、詳細については、「ウェブディストリビューションを作成または更新する場合に指定する値」セクションの「オリジン応答タイムアウト (Amazon EC2、Elastic Load Balancing、および他のカスタムオリジンのみ)」を参照してください。

同じオブジェクト (トラフィックスパイク) の同時リクエスト

CloudFront エッジロケーションがオブジェクトのリクエストを受け取り、オブジェクトが現在キャッシュにないか、有効期限が切れている場合、CloudFront はすぐにオリジンにリクエストを送信します。トラフィックスパイクがある—同じオブジェクトへの追加のリクエストが、オリジンが最初のリクエストに応答する前にエッジロケーションに届く—場合、CloudFront は短時間一時停止してから、オブジェクトへの追加のリクエストをオリジンに転送します。通常、最初のリクエストへのレスポンスは、それ以降のリクエストに対するレスポンスの前に、CloudFront エッジロケーションに届きます。この短い停止により、オリジンサーバーでの不要な負荷が減ります。リクエストヘッダーや Cookie に基づいてキャッシュするように CloudFront を設定した場合など、追加のリクエストが同じでない場合、CloudFront はすべての一意のリクエストをオリジンに転送します。

ユーザーエージェントヘッダー

ユーザーがコンテンツの表示に使用しているデバイスに基づいて、オブジェクトの異なるバージョンを CloudFront でキャッシュするには、該当するヘッダーをカスタムオリジンに転送するように CloudFront を設定することをお勧めします。

  • CloudFront-Is-Desktop-Viewer

  • CloudFront-Is-Mobile-Viewer

  • CloudFront-Is-SmartTV-Viewer

  • CloudFront-Is-Tablet-Viewer

CloudFront は、User-Agent ヘッダーの値に基づいて、これらのヘッダーの値を true または false に設定した後、リクエストをオリジンに転送します。デバイスが複数のカテゴリに属する場合は、複数の値が true になることがあります。たとえば、あるタブレットデバイスについて、CloudFront が CloudFront-Is-Mobile-ViewerCloudFront-Is-Tablet-Viewer の両方を true に設定する場合があります。リクエストヘッダーに基づいてキャッシュするように CloudFront を設定する方法の詳細については、「リクエストヘッダーに基づいてオブジェクトをキャッシュするように CloudFront を設定する」を参照してください。

User-Agent ヘッダーの値に基づいてオブジェクトをキャッシュするように CloudFront を設定できますが、これはお勧めできません。User-Agent ヘッダーには可能な値が多数あり、その値に基づいてキャッシュすると、CloudFront がオリジンに転送するリクエストの数が大幅に増加します。

CloudFront が User-Agent ヘッダーの値に基づいてオブジェクトをキャッシュするように設定しない場合、CloudFront は以下の値を指定した User-Agent ヘッダーを追加して、リクエストをオリジンに転送します。

User-Agent = Amazon CloudFront

CloudFront は、ビューワーからのリクエストに User-Agent ヘッダーが含まれているかどうかに関係なく、このヘッダーを追加します。ビューワーからのリクエストに User-Agent ヘッダーが含まれる場合、CloudFront はそのヘッダーを削除します。

CloudFront がカスタムオリジンサーバーからのレスポンスを処理する方法

CloudFront がカスタムオリジンサーバーからのレスポンスを処理する方法については、該当するトピックを参照してください。

キャッシュ

  • オリジンサーバーが Date および Last-Modified ヘッダーフィールドに有効かつ正確な値を設定していることを確認します。

  • ビューワーからのリクエストに If-Match または If-None-Match リクエストヘッダーフィールドが含まれる場合、ETag レスポンスヘッダーフィールドを設定します。ETag の値が指定されていない場合、CloudFront は以降の If-Match または If-None-Match ヘッダーを無視します。

  • 通常、CloudFront はオリジンからのレスポンスの Cache-Control: no-cache ヘッダーを優先します。例外については、「同じオブジェクト (トラフィックスパイク) の同時リクエスト」を参照してください。

取り消されたリクエスト

オブジェクトがエッジキャッシュになく、CloudFront がオブジェクトをオリジンから取得したものの、リクエストされたそのオブジェクトを配信する前にビューワーがセッションを終了すると (ブラウザを閉じるなど)、CloudFront はそのオブジェクトをエッジロケーションにキャッシュしません。

コンテンツネゴシエーション

オリジンが応答で Vary:* を返し、対応するキャッシュ動作の [Minimum TTL] の値が [0] の場合、CloudFront はオブジェクトをキャッシュしますが、そのオブジェクトの後続のすべてのリクエストをオリジンに転送して、オブジェクトの最新バージョンが含まれていることを確認します。CloudFront には、If-None-MatchIf-Modified-Since などの条件付きヘッダーは含まれません。その結果、オリジンはすべてのリクエストに応じて CloudFront にオブジェクトを返します。

オリジンが応答で Vary:* を返し、レスポンスで返される、対応するキャッシュ動作の [Minimum TTL] の値が別の値になっている場合、CloudFront は「CloudFront が削除または更新する HTTP レスポンスヘッダー」に記述されている方法で Vary ヘッダーを処理します。

Cookie

キャッシュ動作の Cookie を有効にしており、オリジンが Cookie とオブジェクトを返す場合、CloudFront はオブジェクトと Cookie の両方をキャッシュします。これにより、オブジェクトのキャッシュ可能性が低下します。詳細については、「Cookie に基づいてオブジェクトをキャッシュするように CloudFront を設定する」を参照してください。

中断された TCP 接続

オリジンがオブジェクトを CloudFront に返している間に CloudFront とオリジン間の TCP 接続が中断した場合、CloudFront の動作は、オリジンが Content-Length ヘッダーをレスポンスに含めたかどうかによって異なります。

  • Content-Length ヘッダーあり – CloudFront は、オブジェクトをオリジンから取得すると、ビューワーにオブジェクトを返します。ただし、Content-Length ヘッダーの値がオブジェクトのサイズに一致しない場合、CloudFront はオブジェクトをキャッシュしません。

  • Transfer-Encoding: Chunked – CloudFront は、オブジェクトをオリジンから取得すると、ビューワーにオブジェクトを返します。ただし、チャンクレスポンスが完了していない場合、CloudFront はオブジェクトをキャッシュしません。

  • Content-Length ヘッダーなし – CloudFront はオブジェクトをビューワーに返して、オブジェクトをキャッシュしますが、オブジェクトが完全でない場合があります。Content-Length ヘッダーがない場合、CloudFront は、TCP 接続が誤って中断されたか、または故意に中断されたかを判断できません。

Content-Length ヘッダーを追加して、CloudFront が不完全なオブジェクトをキャッシュしないように HTTP サーバーを設定することをお勧めします。

CloudFront が削除または更新する HTTP レスポンスヘッダー

CloudFront は、オリジンからのレスポンスをビューワーに転送する前に、以下のヘッダーフィールドを削除または更新します。

  • Set-Cookie – Cookie を転送するように CloudFront を構成している場合、Set-Cookie ヘッダーフィールドがクライアントに転送されます。詳細については、「Cookie に基づいてオブジェクトをキャッシュするように CloudFront を設定する」を参照してください。

  • Trailer

  • Transfer-Encoding – オリジンがこのヘッダーフィールドを返す場合、CloudFront は値を chunked に設定してビューワーにレスポンスを返します。

  • Upgrade

  • Vary – 次の点に注意してください。

    • デバイス固有のヘッダーのいずれかをオリジン (CloudFront-Is-Desktop-ViewerCloudFront-Is-Mobile-ViewerCloudFront-Is-SmartTV-ViewerCloudFront-Is-Tablet-Viewer) に転送するように CloudFront を設定しており、オリジンが Vary:User-Agent を CloudFront に返すように設定している場合、CloudFront は Vary:User-Agent をビューワーに返します。詳細については、「デバイスタイプに基づいてオブジェクトをキャッシュするように CloudFront を設定する」を参照してください。

    • Vary ヘッダーに、Accept-Encoding または Cookie のいずれかを含めるよう設定した場合、CloudFront はした場合、ビューワーへの応答にその値を含めます。

    • オリジンにヘッダーのホワイトリストを転送するように CloudFront を設定し、Vary ヘッダー (たとえば Vary:Accept-Charset,Accept-Language) の CloudFront にヘッダー名を返すようにオリジンを設定した場合、CloudFront はこれらの値を持つ Vary ヘッダーをビューワーに返します。

    • CloudFront が Vary ヘッダーの * 値を処理する詳細については、「コンテンツネゴシエーション」を参照してください。

    • Vary ヘッダーで他の値を返すようにオリジンを設定している場合、CloudFront は応答をビューワーに返す前にその値を削除します。

  • Via – オリジンがこのヘッダーフィールドを CloudFront に返すかどうかにかかわらず、CloudFront は次の値を設定します。

    Via: 1.1 alphanumeric-string.cloudfront.net (CloudFront)

    その後、ビューワーにこのレスポンスを返します。(例:

    Via: 1.1 1026589cc7887e7a0dc7827b4example.cloudfront.net (CloudFront)

最大ファイルサイズ

CloudFront がビューワーに返すレスポンス本文の最大サイズは 20 GB です。これには、Content-Length ヘッダーの値を指定しないチャンク転送レスポンスが含まれます。

使用できないオブジェクト

オリジンサーバーが使用できないときに、CloudFront がエッジキャッシュに存在するオブジェクトのリクエストを受け取り、そのオブジェクトが (たとえば、Cache-Control max-age ディレクティブに指定された期間が経過しているために) 有効期限切れになっている場合、CloudFront は有効期限切れバージョンのオブジェクトを供給するか、またはカスタムエラーページを供給します。詳細については、「CloudFront がオリジンからの HTTP 4xx および 5xx ステータスコードを処理してキャッシュに保持する方法」を参照してください。

場合によって、要求頻度の低いオブジェクトは削除されてエッジキャッシュで使用できなくなることがあります。CloudFront は、削除されたオブジェクトを供給することはできません。

リダイレクト

オリジンサーバーでオブジェクトの場所を変更した場合、リクエストを新しい場所にリダイレクトするようにウェブサーバーを構成できます。リダイレクトが構成された後、ビューワーがオブジェクトのリクエストを最初に送信したときに、CloudFront はリクエストをオリジンに送信し、オリジンはリダイレクトで応答します (例: 302 Moved Temporarily)。CloudFront はリダイレクトをキャッシュし、ビューワーにリダイレクトを返します。CloudFront はリダイレクトに従いません。

リクエストを以下のどちらかの場所にリダイレクトするようにウェブサーバーを構成できます。

  • オリジンサーバーのオブジェクトの新しい URL。ビューワーが新しい URL へのリダイレクトに従う場合、ビューワーは CloudFront をバイパスし、オリジンに直接アクセスします。つまり、オリジンにあるオブジェクトの新しい URL にリクエストをリダイレクトしないことをお勧めします。

  • オブジェクトの新しい CloudFront URL。新しい CloudFront URL を含むリクエストがビューワーから送信されると、CloudFront は、オリジンの新しい場所からオブジェクトを取得し、エッジロケーションにキャッシュした後、ビューワーにオブジェクトを返します。オブジェクトに対する以降のリクエストはエッジロケーションによって処理されます。これにより、オリジンのオブジェクトを要求するビューワーに関連するレイテンシーと負荷が回避されます。ただし、オブジェクトに対する新しいすべてのリクエストに、CloudFront への 2 つのリクエストに対する料金がかかります。

転送エンコード

CloudFront は、Transfer-Encoding ヘッダーの chunked 値のみをサポートします。オリジンが Transfer-Encoding: chunked を返した場合、CloudFront は、エッジロケーションで受け取ったオブジェクトをクライアントに返し、そのオブジェクトをチャンク形式でキャッシュして以降のリクエストに備えます。

ビューワーが Range GET をリクエストし、オリジンは Transfer-Encoding: chunked を返し、CloudFront はリクエストされた範囲ではなくオブジェクト全体をビューワーに返します。

レスポンスのコンテンツ長を事前に決定できない場合は、チャンクエンコーディングを使用することをお勧めします。詳細については、「中断された TCP 接続」を参照してください。