「カスタムオリジンのリクエストとレスポンスの動作」 - Amazon CloudFront

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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

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

このトピックでは、 がビューワーリクエスト CloudFront を処理し、カスタムオリジンにリクエストを転送する方法について説明します。

認証

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

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

HTTP または HTTPS を使用してオリジンにリクエストを転送する CloudFront ように を設定できます。詳細については、「」を参照してくださいで HTTPS を使用する CloudFront

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

がオリジンに別のリクエスト CloudFront を転送する前にオブジェクトが CloudFront キャッシュに保持される期間を制御するには、次の操作を行います。

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

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

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

詳細については、「コンテンツがキャッシュに保持される期間 (有効期限) の管理」を参照してください。

クライアント IP アドレス

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

X-Forwarded-For: 192.0.2.2

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

X-Forwarded-For: 192.0.2.4,192.0.2.3,192.0.2.2

ロードバランサー (Elastic Load Balancing を含む)、ウェブアプリケーションファイアウォール、リバースプロキシ、侵入防止システム、API Gateway などの一部のアプリケーションは、リクエストをX-Forwarded-Forヘッダーの最後に転送した CloudFront エッジサーバーの IP アドレスを追加します。例えば、ELB に転送するリクエストX-Forwarded-For: 192.0.2.2に CloudFront が含まれ、 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::8a2e:0370:7334 など) が含まれます。

また、 X-Forwarded-Forヘッダーは、現在のサーバー () へのパス上のすべてのノードによって変更される可能性があることに注意してくださいCloudFront。詳細については、RFC 7239 のセクション 8.1 を参照してください。 CloudFront エッジコンピューティング関数を使用して ヘッダーを変更することもできます。

クライアント側の SSL 認証

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

圧縮

詳しくは、「圧縮ファイルの供給」を参照してください。

条件付きリクエスト

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

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

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

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

cookie

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

クロスオリジンリソース共有 (CORS)

クロスオリジンリソース共有設定を優先 CloudFront する場合は、 Originヘッダーをオリジン CloudFront に転送するように を設定します。詳細については、「リクエストヘッダーに基づくコンテンツのキャッシュ」を参照してください。

暗号化

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

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

  • CloudFront コンソールを使用している場合は、オリジン SSL プロトコルチェックボックスを使用してプロトコルを選択します。詳細については、「ディストリビューションの作成」を参照してください。

  • CloudFront API を使用している場合は、 OriginSslProtocols要素を使用してプロトコルを指定します。詳細については、「Amazon API リファレンスDistributionConfig」のOriginSslProtocols「」と「」を参照してください。 CloudFront

オリジンが Amazon S3 バケットの場合、 CloudFront は常に TLSv1.2.

重要

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

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

本文を含む GET リクエスト

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

HTTP メソッド

サポートしているすべての HTTP メソッドを処理する CloudFront ように を設定した場合、 CloudFront はビューワーからの次のリクエストを受け入れ、カスタムオリジンに転送します。

  • DELETE

  • GET

  • HEAD

  • OPTIONS

  • PATCH

  • POST

  • PUT

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

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

重要

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

HTTP リクエストヘッダーと CloudFront 動作 (カスタムオリジンと Amazon S3 オリジン)

次の表は、カスタムオリジンと Amazon S3 オリジンの両方に転送できる HTTP リクエストヘッダーを示しています (例外も注記されています)。この表には、各ヘッダーについて以下に関する情報も含まれています。

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

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

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

ヘッダー値に基づくキャッシュの詳細については、「リクエストヘッダーに基づくコンテンツのキャッシュ」を参照してください。

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

他の定義されたヘッダー

レガシーキャッシュ設定 — CloudFront ヘッダーをオリジンに転送します。

はい

Accept

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

はい

Accept-Charset

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

はい

Accept-Encoding

値に gzipまたは が含まれている場合br、オリジンに正規化されたAccept-Encodingヘッダーを CloudFront 転送します。

詳細については、「圧縮のサポート」および「圧縮ファイルの供給」を参照してください。

はい

Accept-Language

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

はい

Authorization

  • GET および HEADリクエスト – CloudFront リクエストをオリジンに転送する前に、 Authorizationヘッダーフィールドを削除します。

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

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

  • DELETEPATCH、、POSTおよび PUTリクエスト – CloudFront リクエストをオリジンに転送する前に、 ヘッダーフィールドを削除しません。

はい

Cache-Control

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

いいえ

CloudFront-Forwarded-Proto

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

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

はい

CloudFront-Is-Desktop-Viewer

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

詳細については、「デバイスタイプに基づいてキャッシュを設定する」を参照してください。

はい

CloudFront-Is-Mobile-Viewer

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

詳細については、「デバイスタイプに基づいてキャッシュを設定する」を参照してください。

はい

CloudFront-Is-Tablet-Viewer

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

詳細については、「デバイスタイプに基づいてキャッシュを設定する」を参照してください。

はい

CloudFront-Viewer-Country

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

はい

Connection

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

いいえ

Content-Length

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

いいえ

Content-MD5

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

はい

Content-Type

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

はい

Cookie

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

いいえ

Date

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

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

Expect

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

はい

From

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

はい

Host

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

Amazon S3 または MediaStore オリジンのホストヘッダーに基づいてキャッシュすることはできません。

はい (カスタム)

いいえ (S3 および MediaStore)

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 を処理する方法 (範囲 GETs)」を参照してください。

はい (デフォルト)

Referer

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

はい

Request-Range

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

いいえ

TE

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

いいえ

Trailer

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

いいえ

Transfer-Encoding

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

いいえ

Upgrade

CloudFront は、WebSocket 接続を確立しない限り、 ヘッダーを削除します。

いいえ ( WebSocket 接続を除く)

User-Agent

CloudFront は、このヘッダーフィールドの値を に置き換えますAmazon 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-HTTP-Method-Override

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

はい

X-Real-IP

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

いいえ

HTTP バージョン

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

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

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

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

リクエストまたは URL がこれらの最大値を超えると、 は HTTP ステータスコード 413、リクエストエンティティが大きすぎるをビューワーに CloudFront 返し、ビューワーへの TCP 接続を終了します。

OCSP Stapling

ビューワーがオブジェクトの HTTPS リクエストを送信すると、 CloudFront または ビューワーは、ドメインの SSL 証明書が取り消されていないことを認証機関 (CA) に確認する必要があります。OCSP Stapling は、 CloudFront が証明書を検証し、CA からのレスポンスをキャッシュできるようにすることで、証明書の検証を高速化するため、クライアントは CA で証明書を直接検証する必要はありません。

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

持続的接続

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

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

プロトコル

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

  • ビューワーが に送信するリクエストのプロトコル。HTTP または HTTPS CloudFrontのいずれかです。

  • コンソールのオリジンプロトコルポリシーフィールド CloudFrontの値、または CloudFront API を使用している場合は、DistributionConfig複合型の OriginProtocolPolicy要素。 CloudFront コンソールでは、オプションは HTTP のみ、HTTPS のみ一致ビューワー です

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

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

重要

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

CloudFront コンソールを使用してディストリビューションを更新する方法については、「」を参照してくださいディストリビューションの更新。 CloudFront API を使用してディストリビューションを更新する方法については、「Amazon CloudFront API リファレンスUpdateDistribution」の「」を参照してください。

クエリ文字列

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

オリジン接続のタイムアウトと試行

オリジン接続タイムアウトは、オリジンへの接続を確立しようとしたときに が CloudFront 待機する秒数です。

オリジン接続の試行回数は、 がオリジンへの接続を CloudFront 試行する回数です。

これらの設定は、セカンダリオリジンにフェイルオーバーするか (オリジングループの場合)、ビューワーにエラーレスポンスを返す前に、オリジンへの接続を CloudFront 試行する時間を決定します。デフォルトでは、 はセカンダリオリジンに接続しようとしたり、エラーレスポンスを返したりする前に、30 秒 (それぞれ 10 秒間の試行が 3 回) CloudFront 待機します。接続タイムアウトを短くするか、試行回数を減らすか、その両方を行うことで、この時間を短縮できます。

詳細については、「オリジンのタイムアウトと試行の制御」を参照してください。

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

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

  • リクエストをオリジンに転送した後、 がレスポンスを CloudFront 待機する秒単位の時間。

  • がオリジンからレスポンスのパケットを受信した後、次のパケットを受信するまでに CloudFront 待機する秒単位の時間。

CloudFront 動作は、ビューワーリクエストの HTTP メソッドによって異なります。

  • GET および HEADリクエスト – 応答タイムアウトの期間内にオリジンが応答しない場合、または応答を停止した場合、 は接続を CloudFront ドロップします。指定された数のオリジン接続の試行が 1 回を超える場合、 CloudFront は完全なレスポンスの取得を再試行します。 は、オリジン接続 CloudFront の試行回数設定の値によって決まるように、最大 3 回試行します。 オリジンが最後の試行中に応答しない場合、 CloudFront 同じオリジンのコンテンツに対する別のリクエストを受信するまで、 は再試行しません。

  • DELETEOPTIONSPATCH、、PUTおよび POSTリクエスト – オリジンが 30 秒以内に応答しない場合、 は接続を CloudFront ドロップし、オリジンへの接続を再試行しません。クライアントは、必要に応じてリクエストを再送信できます。

オリジン応答タイムアウトを設定する方法など、詳細については、「応答タイムアウト (カスタムオリジンのみ)」を参照してください。

同一オブジェクトへの同時リクエスト (リクエストを折りたたむ)

CloudFront エッジロケーションがオブジェクトのリクエストを受け取り、オブジェクトがキャッシュにないか、キャッシュされたオブジェクトの有効期限が切れている場合、 CloudFront はすぐにリクエストをオリジンに送信します。ただし、同じオブジェクトに対する同時リクエストがある場合、つまり、同じオブジェクトに対する追加のリクエスト (同じキャッシュキーを持つ) が、 が最初のリクエストに対するレスポンス CloudFront を受信する前にエッジロケーションに到着した場合、 は追加のリクエストをオリジンに転送する前にCloudFront 一時停止します。この短い一時停止は、オリジンの負荷を軽減するために役立ちます。 は、一時停止中に受信したすべてのリクエストに、元のリクエストからのレスポンス CloudFront を送信します。これはリクエストの折りたたみと呼ばれます。 CloudFront ログでは、最初のリクエストは x-edge-result-typeフィールドMissで として識別され、折りたたまれたリクエストは として識別されますHit。 CloudFront ログの詳細については、「」を参照してくださいCloudFront およびエッジ関数のログ記録

CloudFront は、キャッシュキー を共有するリクエストのみを折りたたみます。例えば、リクエストヘッダー、Cookie、またはクエリ文字列に基づいてキャッシュ CloudFront するように を設定しているため、追加のリクエストが同じキャッシュキーを共有しない場合、オリジンに対して一意のキャッシュキーを持つすべてのリクエスト CloudFront が転送されます。

すべてのリクエストが折りたたまれないようにするには、マネージドキャッシュポリシー を使用できます。これによりCachingDisabled、キャッシュも防止されます。詳細については、「管理キャッシュポリシーの使用」を参照してください。

特定のオブジェクトでのリクエストの折りたたみを防ぐ場合は、キャッシュ動作の最小 TTL を 0 に設定し、さらに Cache-Control: privateCache-Control: no-storeCache-Control: no-cacheCache-Control: max-age=0、または Cache-Control: s-maxage=0 を送信するようにオリジンを設定できます。これらの設定により、オリジンの負荷が増加し、 が最初のリクエストへの応答を CloudFront 待っている間に一時停止される同時リクエストのレイテンシーが増加します。

User-Agent ヘッダー

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

  • CloudFront-Is-Desktop-Viewer

  • CloudFront-Is-Mobile-Viewer

  • CloudFront-Is-SmartTV-Viewer

  • CloudFront-Is-Tablet-Viewer

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

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

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

User-Agent = Amazon CloudFront

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

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

このトピックでは、 がカスタムオリジンからのレスポンス CloudFront を処理する方法について説明します。

100 Continue 件のレスポンス

オリジンは、複数の 100-Continueレスポンスを に送信することはできません CloudFront。最初の 100-Continueレスポンスの後に、 は HTTP 200 OK レスポンス CloudFront を想定します。オリジンが最初のレスポンスの後に別の 100-Continueレスポンスを送信すると、 CloudFront エラーが返されます。

キャッシュ

取り消されたリクエスト

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

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

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

オリジンがレスポンスVary:*で を返し、対応するキャッシュ動作の最小 TTL の値が他の値である場合、 は で説明されているように Varyヘッダー CloudFront を処理します CloudFront を削除または置き換える HTTP レスポンスヘッダー

cookie

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

中断された TCP 接続

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

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

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

  • Content-Length ヘッダーなし — オブジェクトをビューワーに CloudFront 返してキャッシュしますが、オブジェクトが完了しない可能性があります。Content-Length ヘッダーがないと、TCP 接続が誤って切断されたか、または目的で切断されたかを特定 CloudFront できません。

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

CloudFront を削除または置き換える HTTP レスポンスヘッダー

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

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

  • Trailer

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

  • Upgrade

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

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

    • Vary ヘッダーCookieAccept-Encodingまたは を含めるようにオリジンを設定すると、 はビューワーへのレスポンスに値 CloudFront を含めます。

    • ヘッダーをオリジンに転送 CloudFront するように を設定し、Varyヘッダー ( などVary:Accept-Charset,Accept-Language) CloudFront の にヘッダー名を返すようにオリジンを設定すると、 はそれらの値を持つ Vary ヘッダーをビューワーに CloudFront 返します。

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

    • Vary ヘッダーに他の値を含めるようにオリジンを設定すると、 はビューワーにレスポンスを返す前に値 CloudFront を削除します。

  • Via - ビューワーへのレスポンスで、値を次のように CloudFront 設定します。

    Via: http-version alphanumeric-string.cloudfront.net (CloudFront)

    たとえば、クライアントが HTTP/1.1 を介してリクエストを行った場合、値は次のようになります。

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

キャッシュ可能なファイルの最大サイズ

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

CloudFront を使用して、範囲リクエストを使用して各 50 GB 以下のパートのオブジェクトをリクエストすることで、このサイズより大きいオブジェクトをキャッシュできます。 CloudFront は、各パートが 50 GB 以下のため、これらのパートをキャッシュします。ビューワーによって、オブジェクトのすべてのパートを取得した後、元の大きなオブジェクトが再構築されます。詳しくは、「範囲リクエストを使用して大きなオブジェクトをキャッシュする」を参照してください。

使用できないオリジン

オリジンサーバーが使用できず、エッジキャッシュにあるが有効期限が切れているオブジェクト (例えば、 Cache-Control max-age ディレクティブで指定された期間が経過したため) のリクエスト CloudFront を受け取った場合、 CloudFront はオブジェクトの有効期限が切れたバージョンを提供するか、カスタムエラーページを提供します。カスタムエラーページを設定したときの CloudFront の動作の詳細については、「カスタムエラーページを設定した場合に がエラー CloudFront を処理する方法」を参照してください。

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

リダイレクト

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

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

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

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

Transfer-Encoding ヘッダー

CloudFront は、 Transfer-Encodingヘッダーchunkedの値のみをサポートします。オリジンが を返した場合Transfer-Encoding: chunked、 はエッジロケーションでオブジェクトが受信されるとオブジェクトをクライアントに CloudFront 返し、後続のリクエストではオブジェクトをチャンク形式でキャッシュします。

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

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