翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
「カスタムオリジンのリクエストとレスポンスの動作」
がリクエスト CloudFront を処理してカスタムオリジンに転送する方法
このトピックでは、 がビューワーリクエスト CloudFront を処理し、カスタムオリジンにリクエストを転送する方法について説明します。
トピック
- 認証
- キャッシュ期間および最小 TTL
- クライアント IP アドレス
- クライアント側の SSL 認証
- 圧縮
- 条件付きリクエスト
- cookie
- クロスオリジンリソース共有 (CORS)
- 暗号化
- 本文を含む GET リクエスト
- HTTP メソッド
- HTTP リクエストヘッダーと CloudFront 動作 (カスタムオリジンと Amazon S3 オリジン)
- HTTP バージョン
- リクエストの最大長と URL の最大長
- OCSP Stapling
- 持続的接続
- プロトコル
- クエリ文字列
- オリジン接続のタイムアウトと試行
- オリジン応答タイムアウト
- 同一オブジェクトへの同時リクエスト (リクエストを折りたたむ)
- User-Agent ヘッダー
認証
DELETE
、、GET
、HEAD
、POST
、および PUT
リクエストの場合、 ヘッダーをオリジン に転送するように PATCH
を設定すると、クライアント認証をリクエストするようにオリジンサーバーを設定できます。 CloudFront Authorization
OPTIONS
リクエストの場合、次の CloudFront 設定を使用する場合にのみ、クライアント認証をリクエストするようにオリジンサーバーを設定できます。
-
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
クライアント側の 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
リクエストへのレスポンスを常にキャッシュします。また、OPTIONS
requests. CloudFront does へのレスポンスをキャッシュ CloudFront するように を設定することもできます。他のメソッドを使用するリクエストへのレスポンスはキャッシュしません。
カスタムオリジンが上記のメソッドを処理するかどうかを構成する方法の詳細については、オリジンのドキュメントを参照してください。
重要
が CloudFront サポートするすべての HTTP メソッド CloudFront を受け入れてオリジンに転送するように を設定する場合は、すべてのメソッドを処理するようにオリジンサーバーを設定します。例えば、 を使用するためにこれらのメソッドを受け入れて転送 CloudFront するように を設定する場合POST
、ビューワーが不要なリソースを削除できないように、DELETE
リクエストを適切に処理するようにオリジンサーバーを設定する必要があります。詳細については、HTTP サーバーのドキュメントを参照してください。
HTTP リクエストヘッダーと CloudFront 動作 (カスタムオリジンと Amazon S3 オリジン)
次の表は、カスタムオリジンと Amazon S3 オリジンの両方に転送できる HTTP リクエストヘッダーを示しています (例外も注記されています)。この表には、各ヘッダーについて以下に関する情報も含まれています。
-
CloudFront ヘッダーをオリジンに転送 CloudFront するように を設定しない場合の の動作。これにより、 CloudFront はヘッダー値に基づいてオブジェクトをキャッシュします。
-
そのヘッダーのヘッダー値に基づいてオブジェクトをキャッシュ CloudFront するように を設定できるかどうか。
ヘッダー
Date
とUser-Agent
ヘッダーの値に基づいてオブジェクトをキャッシュ CloudFront するように を設定できますが、お勧めしません。これらのヘッダーには可能な値が多数あり、その値に基づいてキャッシュすると、 がオリジン CloudFront に転送するリクエストの数が大幅に増加します。
ヘッダー値に基づくキャッシュの詳細については、「リクエストヘッダーに基づくコンテンツのキャッシュ」を参照してください。
[Header] (ヘッダー) | ヘッダー値に基づいてキャッシュ CloudFront するように を設定しない場合の動作 | ヘッダー値に基づくキャッシュがサポートされている |
---|---|---|
他の定義されたヘッダー |
レガシーキャッシュ設定 — CloudFront ヘッダーをオリジンに転送します。 |
はい |
|
CloudFront は ヘッダーを削除します。 |
はい |
|
CloudFront は ヘッダーを削除します。 |
はい |
|
値に |
はい |
|
CloudFront は ヘッダーを削除します。 |
はい |
|
|
はい |
|
CloudFront は ヘッダーをオリジンに転送します。 |
いいえ |
|
CloudFront は、リクエストをオリジンに転送する前に ヘッダーを追加しません。 詳細については、「リクエストのプロトコルに基づいてキャッシュを設定する」を参照してください。 |
はい |
|
CloudFront は、リクエストをオリジンに転送する前に ヘッダーを追加しません。 詳細については、「デバイスタイプに基づいてキャッシュを設定する」を参照してください。 |
はい |
|
CloudFront は、リクエストをオリジンに転送する前に ヘッダーを追加しません。 詳細については、「デバイスタイプに基づいてキャッシュを設定する」を参照してください。 |
はい |
|
CloudFront は、リクエストをオリジンに転送する前に ヘッダーを追加しません。 詳細については、「デバイスタイプに基づいてキャッシュを設定する」を参照してください。 |
はい |
|
CloudFront は、リクエストをオリジンに転送する前に ヘッダーを追加しません。 |
はい |
|
CloudFront は、リクエストをオリジンに転送 |
いいえ |
|
CloudFront は ヘッダーをオリジンに転送します。 |
いいえ |
|
CloudFront は ヘッダーをオリジンに転送します。 |
はい |
|
CloudFront は ヘッダーをオリジンに転送します。 |
はい |
|
Cookie を転送する CloudFront ように を設定すると、 |
いいえ |
|
CloudFront は ヘッダーをオリジンに転送します。 |
はい、ただし推奨されません |
|
CloudFront は ヘッダーを削除します。 |
はい |
|
CloudFront は ヘッダーをオリジンに転送します。 |
はい |
|
CloudFront は、リクエストされたオブジェクトに関連付けられているオリジンのドメイン名に値を設定します。 Amazon S3 または MediaStore オリジンのホストヘッダーに基づいてキャッシュすることはできません。 |
はい (カスタム) いいえ (S3 および MediaStore) |
|
CloudFront は ヘッダーをオリジンに転送します。 |
はい |
|
CloudFront は ヘッダーをオリジンに転送します。 |
はい |
|
CloudFront は ヘッダーをオリジンに転送します。 |
はい |
|
CloudFront は ヘッダーをオリジンに転送します。 |
はい |
|
CloudFront は ヘッダーをオリジンに転送します。 |
はい |
|
CloudFront は ヘッダーをオリジンに転送します。 |
いいえ |
|
CloudFront は ヘッダーをオリジンに転送します。 |
はい |
|
CloudFront は ヘッダーをオリジンに転送します。 |
いいえ |
|
CloudFront は ヘッダーを削除します。 |
いいえ |
|
CloudFront は ヘッダーを削除します。 |
いいえ |
|
CloudFront は ヘッダーを削除します。 |
いいえ |
|
CloudFront は ヘッダーをオリジンに転送します。詳細については、「がオブジェクトの部分リクエスト CloudFront を処理する方法 (範囲 GETs)」を参照してください。 |
はい (デフォルト) |
|
CloudFront は ヘッダーを削除します。 |
はい |
|
CloudFront は ヘッダーをオリジンに転送します。 |
いいえ |
|
CloudFront は ヘッダーを削除します。 |
いいえ |
|
CloudFront は ヘッダーを削除します。 |
いいえ |
|
CloudFront は ヘッダーをオリジンに転送します。 |
いいえ |
|
CloudFront は、WebSocket 接続を確立しない限り、 ヘッダーを削除します。 |
いいえ ( WebSocket 接続を除く) |
|
CloudFront は、このヘッダーフィールドの値を に置き換えます |
はい、ただし推奨されません |
|
CloudFront は ヘッダーをオリジンに転送します。 |
はい |
|
CloudFront は ヘッダーをオリジンに転送します。 |
はい |
|
CloudFront は、リクエストをオリジンに転送する前に、ビューワーリクエストに ヘッダーを追加します。ヘッダー値には、リクエストを一意に識別する暗号化された文字列が含められます。 |
いいえ |
|
CloudFront はすべての |
いいえ |
|
CloudFront は ヘッダーをオリジンに転送します。詳細については、「クライアント IP アドレス」を参照してください。 |
はい |
|
CloudFront は ヘッダーを削除します。 |
いいえ |
|
CloudFront は ヘッダーを削除します。 |
はい |
|
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 同じオリジンのコンテンツに対する別のリクエストを受信するまで、 は再試行しません。 -
DELETE
、OPTIONS
、PATCH
、、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:
private
、Cache-Control: no-store
、Cache-Control:
no-cache
、Cache-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 エラーが返されます。
キャッシュ
-
オリジンサーバーが
Date
およびLast-Modified
ヘッダーフィールドに有効かつ正確な値を設定していることを確認します。 -
CloudFront 通常、 はオリジンからのレスポンスの
Cache-Control: no-cache
ヘッダーを優先します。例外については、「同一オブジェクトへの同時リクエスト (リクエストを折りたたむ)」を参照してください。
取り消されたリクエスト
オブジェクトがエッジキャッシュになく、ビューワーがオリジンからオブジェクト 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-Viewer
、CloudFront-Is-Mobile-Viewer
、、CloudFront-Is-Tablet-Viewer
) CloudFront に転送するように を設定しCloudFront-Is-SmartTV-Viewer
、オリジンがVary:User-Agent
に戻るように設定した場合 CloudFront、 CloudFront はビューワーVary:User-Agent
に戻ります。詳細については、「デバイスタイプに基づいてキャッシュを設定する」を参照してください。 -
Vary
ヘッダーCookie
にAccept-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 接続」を参照してください。