メニュー
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 を含む)、ウェブアプリケーションファイアウォール、リバースプロキシ、侵入防御システム、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

Note

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 を必ず使用します。

Important

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

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

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

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

HTTP メソッド

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

  • DELETE

  • GET

  • HEAD

  • OPTIONS

  • PATCH

  • POST

  • PUT

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

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

Caution

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 ハンドシェイクの実行に必要な時間を節約できます。パフォーマンスを向上させるため、持続的接続を許可するようにオリジンサーバーを構成することをお勧めします。

プロトコル

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 回だけです。

Caution

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

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

クエリ文字列

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

リクエストのタイムアウト

CloudFront のリクエストのタイムアウトは、HTTP メソッドによって決まります。

  • GET および HEAD リクエスト – オリジンが 30 秒以内に応答しない場合、CloudFront は接続を中断して、オリジンに対する接続をさらに 2 回試みます。3 回目の試みでもオリジンが応答しない場合、CloudFront は同じオリジンのコンテンツに対する別のリクエストを受け取るまで接続を試みません。

  • DELETEOPTIONSPATCHPUTPOST リクエスト – オリジンが 30 秒以内に応答しない場合、CloudFront は接続を中断し、オリジンへの接続を再試行しません。クライアントは、必要に応じてリクエストを再送信できます。

リクエストのタイムアウトは変更できません。

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

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 はオブジェクトをキャッシュしますが、そのオブジェクトの後続のすべてのリクエストをオリジンに転送して、オブジェクトの最新バージョンが含まれていることを確認します。

オリジンが応答で 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 接続」を参照してください。