‹ ハウツー に戻る

Amazon Lightsail ディストリビューションのリクエストとレスポンスの動作を理解する

最終更新日: 2020 年 7 月 23 日

このガイドでは、Amazon Lightsail ディストリビューションが、リクエストを処理してオリジンに転送し、オリジンからのレスポンスを処理するときの動作に関して説明します。ディストリビューションの詳細については、「Amazon Lightsail の コンテンツ配信ネットワークディストリビューション」を参照してください。

トピック

ディストリビューションがリクエストを処理してオリジンに転送する方法

このトピックには、ディストリビューションがビューワーリクエストを処理してオリジンに転送する方法に関する情報が含まれています。

目次

Authentication

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

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

  • Authorization ヘッダーをオリジンに転送するようにディストリビューションを設定する。

  • OPTIONS リクエストへの応答をキャッシュしないようにディストリビューションを設定する。

HTTP または HTTPS のいずれかを使用してオリジンにリクエストを転送するようにディストリビューションを構成することができます。

キャッシュ期間

ディストリビューションが別のリクエストをオリジンに転送するまでにオブジェクトをキャッシュに保持する時間をコントロールするには :

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

  • キャッシュ寿命 (TTL) には、デフォルト値の 1 日を使用します。

ディストリビューション設定の詳細については、「ディストリビューションアドバンスト設定」を参照してください。

クライアント IP アドレス

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

X-Forwarded-For: 192.0.2.2

ビューワーがリクエストをディストリビューションに転送して X-Forwarded-For リクエストヘッダーを含める場合、 ビューワーの IP アドレスを TCP 接続から取得してそれを X-Forwarded-For ヘッダーの末尾に追加し、リクエストをオリジンに転送します。たとえば、ビューワーのリクエストに X-Forwarded-For: 192.0.2.4,192.0.2.3 が含まれ、ディストリビューションが 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 Gateway などの一部のアプリケーションでは、リクエストを転送したディストリビューションエッジサーバーの IP アドレスを X-Forwarded-For ヘッダーの末尾に付加します。たとえば、ディストリビューションから ELB に転送するリクエストに X-Forwarded-For: 192.0.2.2 が含まれていて、 エッジサーバーの IP アドレスが 192.0.2.199 である場合、インスタンスで受け取るリクエストのヘッダーは次のようになります。

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 認証

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

Compression

Lightsail ディストリビューションは、"identity" および "gzip"Accept-Encoding フィールド値を持つリクエストを転送します。

条件付きリクエスト

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

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

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

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

Cookies

Cookie をオリジンに転送するようにディストリビューションを構成できます。詳細については、「ディストリビューションアドバンスト設定」を参照してください。

Cross-Origin Resource Sharing (CORS)

ディストリビューションで Cross-Origin Resource Sharing 設定を尊重する場合は、 Origin ヘッダーをオリジンに転送するように設定します。

Encryption

ビューワーに HTTPS を使用してディストリビューションに接続するように要求し、HTTP または HTTPS を使用してリクエストをオリジンに転送するようにディストリビューションに要求することができます。

ディストリビューションは、SSLv3、TLSv1.0、TLSv1.1、および TLSv1.2 プロトコルを使用して、HTTPS リクエストをオリジンに転送します。SSL と TLS のその他のバージョンはサポートされていません。

‬本文を含む GET リクエスト‭

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

HTTP メソッド

サポートするすべての HTTP メソッドを許可するようディストリビューションを構成すると、ディストリビューションはビューワーからの以下のリクエストを受け入れてオリジンに転送します。

  • DELETE

  • GET

  • HEAD

  • OPTIONS

  • PATCH

  • POST

  • PUT

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

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

重要

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

HTTP リクエストヘッダーとディストリビューション動作

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

  • サポート - そのヘッダーの値に基づいてオブジェクトをキャッシュするようにディストリビューションを設定できるかどうか。

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

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

  • ヘッダー - 他の定義されたヘッダー

    サポート - あり

    設定されていない場合の動作 - ディストリビューションはヘッダーをオリジンに転送します。

  • ヘッダー - Accept

    サポート - あり

    設定されていない場合の動作 - ディストリビューションはヘッダーを削除します。

  • ヘッダー - Accept-Charset

    サポート - あり

    設定されていない場合の動作 - ディストリビューションはヘッダーを削除します。

  • ヘッダー - Accept-Encoding

    サポート - あり

    設定されていない場合の動作 - 値に gzip が含まれる場合、ディストリビューションは Accept-Encoding: gzip をオリジンに転送します。値に gzip が含まれない場合、ディストリビューションはリクエストをオリジンに転送する前に Accept-Encoding ヘッダーフィールドを削除します。

  • ヘッダー - Accept-Language

    サポート - あり

    設定されていない場合の動作 - ディストリビューションはヘッダーを削除します。

  • ヘッダー - Authorization

    サポート - あり

    設定されていない場合の動作:

    • GETHEAD は、– ディストリビューションに、オリジンに転送する前に Authorization ヘッダーフィールドを削除するようにリクエストします。

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

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

    • DELETEPATCHPOSTPUT はディストリビューションにリクエストをオリジンに転送する前にヘッダーフィールドを削除しないように – にリクエストします。

  • ヘッダー - Cache-Control

    サポート - なし

    設定されていない場合の動作-ディストリビューションはヘッダーをオリジンに転送します。

  • ヘッダー - CloudFront-Forwarded-Proto

    サポート - あり

    設定されていない場合の動作 - ディストリビューションは、リクエストをオリジンに転送する前にヘッダーを追加しません。

  • ヘッダー - CloudFront-Is-Desktop-Viewer

    サポート - あり

    設定されていない場合の動作-ディストリビューションは、リクエストをオリジンに転送する前にヘッダーを追加しません。

  • ヘッダー - CloudFront-Is-Mobile-Viewer

    サポート - あり

    設定されていない場合の動作-ディストリビューションは、リクエストをオリジンに転送する前にヘッダーを追加しません。

  • ヘッダー - CloudFront-Is-Tablet-Viewer

    サポート - あり

    設定されていない場合の動作-ディストリビューションは、リクエストをオリジンに転送する前にヘッダーを追加しません。

  • ヘッダー - CloudFront-Viewer-Country

    サポート - あり

    設定されていない場合の動作 - ディストリビューションは、リクエストをオリジンに転送する前にヘッダーを追加しません。

  • ヘッダー - Connection

    サポート - なし

    設定されていない場合の動作 - ディストリビューションは、オリジンに転送する前に、このヘッダーをConnection: Keep-Aliveで置き換えます。

  • ヘッダー - Content-Length

    サポート - なし

    設定されていない場合の動作 - ディストリビューションはヘッダーをオリジンに転送します。

  • ヘッダー - Content-MD5

    サポート - あり

    設定されていない場合の動作-ディストリビューションはヘッダーをオリジンに転送します。

  • ヘッダー - Content-Type

    サポート - あり

    設定されていない場合の動作-ディストリビューションはヘッダーをオリジンに転送します。

  • ヘッダー - Cookie

    サポート - なし

    設定されていない場合の動作 - Cookie を転送するようにディストリビューションを設定している場合、Cookieヘッダーフィールドをオリジンに転送します。そうでない場合、ディストリビューションは Cookie ヘッダーフィールドを削除します。

  • ヘッダー - Date

    サポート対象 - あり、ただし推奨されません

    設定されていない場合の動作 - ディストリビューションはヘッダーをオリジンに転送します。

  • ヘッダー - Expect

    サポート - あり

    設定されていない場合の動作 - ディストリビューションはヘッダーを削除します。

  • ヘッダー - From

    サポート - あり

    設定されていない場合の動作 - ディストリビューションはヘッダーをオリジンに転送します。

  • ヘッダー - Host

    サポート - あり

    設定されていない場合の動作 - ディストリビューションは、リクエストされたオブジェクトに関連付けられたオリジンのドメイン名に値を設定します。

  • ヘッダー - If-Match

    サポート - あり

    設定されていない場合の動作 - ディストリビューションはヘッダーをオリジンに転送します。

  • ヘッダー - If-Modified-Since

    サポート - あり

    設定されていない場合の動作 - ディストリビューションはヘッダーをオリジンに転送します。

  • ヘッダー - If-None-Match

    サポート - あり

    設定されていない場合の動作 - ディストリビューションはヘッダーをオリジンに転送します。

  • ヘッダー - If-Range

    サポート - あり

    設定されていない場合の動作 - ディストリビューションはヘッダーをオリジンに転送します。

  • ヘッダー - If-Unmodified-Since

    サポート - あり

    設定されていない場合の動作 - ディストリビューションはヘッダーをオリジンに転送します。

  • ヘッダー - Max-Forwards

    サポート - なし

    設定されていない場合の動作 - ディストリビューションはヘッダーをオリジンに転送します。

  • ヘッダー - Origin

    サポート - あり

    設定されていない場合の動作 - ディストリビューションはヘッダーをオリジンに転送します。

  • ヘッダー - Pragma

    サポート - なし

    設定されていない場合の動作 - ディストリビューションはヘッダーをオリジンに転送します。

  • ヘッダー - Proxy-Authenticate

    サポート - なし

    設定されていない場合の動作 - ディストリビューションはヘッダーを削除します。

  • ヘッダー - Proxy-Authorization

    サポート - なし

    設定されていない場合の動作 - ディストリビューションはヘッダーを削除します。

  • ヘッダー - Proxy-Connection

    サポート - なし

    設定されていない場合の動作 - ディストリビューションはヘッダーを削除します。

  • ヘッダー - Range

    サポート対象 - あり (デフォルト)

    設定されていない場合の動作 - ディストリビューションはヘッダーをオリジンに転送します。

  • ヘッダー - Referer

    サポート - あり

    設定されていない場合の動作 - ディストリビューションはヘッダーを削除します。

  • ヘッダー - Request-Range

    サポート - なし

    設定されていない場合の動作 - > ディストリビューションはヘッダーをオリジンに転送します。

  • ヘッダー - TE

    サポート - なし

    設定されていない場合の動作 - ディストリビューションはヘッダーを削除します。

  • ヘッダー - Trailer

    サポート - なし

    設定されていない場合の動作 - ディストリビューションはヘッダーを削除します。

  • ヘッダー - Transfer-Encoding

    サポート - なし

    設定されていない場合の動作 - ディストリビューションはヘッダーをオリジンに転送します。

  • ヘッダー - Upgrade

    サポート - なし (WebSocket 接続の場合を除く)

    設定されていない場合の動作 - WebSocket 接続が確立されていない限り、ディストリビューションはヘッダーを削除します。

  • ヘッダー - User-Agent

    サポート - あり、ただし推奨されません

    設定されていない場合の動作 - ディストリビューションはこのヘッダーフィールドの値をAmazon CloudFrontで置き換えます。

  • ヘッダー - Via

    サポート - あり

    設定されていない場合の動作 - ディストリビューションはヘッダーをオリジンに転送します。

  • ヘッダー - Warning

    サポート - あり

    設定されていない場合の動作 - ディストリビューションはヘッダーをオリジンに転送します。

  • ヘッダー - X-Amz-Cf-Id

    サポート - なし

    設定されていない場合の動作 - ディストリビューションは、リクエストをオリジンに転送する前に、ビューワーリクエストにヘッダーを追加します。ヘッダー値には、リクエストを一意に識別する暗号化された文字列が含められます。

  • ヘッダー - X-Edge-*

    サポート - なし

    設定されていない場合の動作 - あなたのディストリビューションは、すべてのX-Edge-*ヘッダー。

  • ヘッダー - X-Forwarded-For

    サポート - あり

    設定されていない場合の動作 - ディストリビューションはヘッダーをオリジンに転送します。

  • ヘッダー - X-Forwarded-Proto

    サポート - なし

    設定されていない場合の動作 - ディストリビューションはヘッダーを削除します。

  • ヘッダー - X-Real-IP

    サポート - なし

    設定されていない場合の動作 - ディストリビューションはヘッダーを削除します。

HTTP バージョン

ディストリビューションは HTTP/1.1 を使用してオリジンにリクエストを転送します。

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

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

ディストリビューションはリクエストから URL を構築します。この URL の最大長は 8192 文字です。

リクエストまたは URL がこの最大制限を超えると、ディストリビューションは、リクエストエンティティが長すぎることを示す HTTP ステータスコード 413 (Request Entity Too Large) をビューワーに返してから、ビューワーへの TCP 接続を終了します。

OCSP Stapling

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

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

永続的接続

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

Protocols

ディストリビューションは、HTTP または HTTPS リクエストを、Lightsail コンソールのオリジンプロトコルポリシー欄の値に基づいてオリジンサーバーに転送します。Lightsail コンソールで使用できるオプションは、[HTTP Only] と [HTTPS Only] です。

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

重要

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

クエリ文字列

でディストリビューションがクエリ文字列パラメータをオリジンに転送するかどうかを構成できます。

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

デフォルトでは、ディストリビューションはセカンダリオリジンへの接続を試行したり、エラーレスポンスを返したりする前に 30 秒 (それぞれ 10 秒間の試行が 3 回) 待機します。

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

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

  • ディストリビューションがリクエストをオリジンに転送してからレスポンスを受け取るまでの待機時間 (秒)

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

ディストリビューションの動作は、ビューワーリクエストの HTTP メソッドによって決まります。

  • GET および HEAD は、応答タイムアウトの期間内にオリジンが応答しない場合、または応答を停止した場合、ディストリビューションは接続を中断するように – にリクエストします。指定されたオリジン接続の試行回数が 1 回を超える場合、ディストリビューションは完全な応答の取得を再試行します。オリジン接続の試行回数設定の値で決められているように、ディストリビューションは最大 3 回試行します。最後の試行でもオリジンが応答しない場合、ディストリビューションは同じオリジンのコンテンツに対する別のリクエストを受け取るまで接続を試みません。

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

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

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

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

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

  • CloudFront-Is-Desktop-Viewer

  • CloudFront-Is-Mobile-Viewer

  • CloudFront-Is-SmartTV-Viewer

  • CloudFront-Is-Tablet-Viewer

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

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

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

User-Agent = Amazon CloudFront

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

ディストリビューションがオリジンからの応答を処理する仕組み

このトピックには、 オリジンからのレスポンスを ディストリビューショが処理する方法に関する情報が含まれています。

目次

100-continue レスポンス

オリジンは複数の 100-continue レスポンスをディストリビューションに送信することはできません。最初の 100-continue レスポンスの後で、ディストリビューションは HTTP 200 OK レスポンスを予期します。オリジンが最初のレスポンスの後に別の 100-continue レスポンスを送信すると、ディストリビューションはエラーを返します。

Caching

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

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

  • 通常、ディストリビューションはオリジンからのレスポンスの Cache-Control: no-cache ヘッダーを優先します。例外については、「同じオブジェクトに対する同時要求(トラフィックの急増)」を参照してください。

取り消されたリクエスト

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

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

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

オリジンが応答で Vary:* を返し、レスポンスで返される、対応するキャッシュ動作の [Minimum TTL] の値が別の値になっている場合、CloudFront は「ディストリビューションが追加したり置き換える HTTP レスポンスヘッダー」に記述されている方法で Vary ヘッダーを処理します。

Cookies

キャッシュ動作の Cookie を有効にしており、オリジンが Cookie とオブジェクトを返す場合、ディストリビューションはオブジェクトと Cookie の両方をキャッシュします。これにより、オブジェクトのキャッシュ可能性が低下します。

切断された TCP 接続

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

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

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

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

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

ディストリビューションが削除または置き換える HTTP レスポンスヘッダー

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

  • Set-Cookie – Cookie を転送するようにディストリビューションを構成している場合、Set-Cookie ヘッダーフィールドがクライアントに転送されます。

  • Trailer

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

  • Upgrade

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

    • デバイス固有のヘッダーのいずれかをオリジン (CloudFront-Is-Desktop-ViewerCloudFront-Is-Mobile-ViewerCloudFront-Is-SmartTV-ViewerCloudFront-Is-Tablet-Viewer) に転送するようにディストリビューションを設定しており、オリジンが Vary:User-Agent をディストリビューションに返すように設定している場合、ディストリビューションは Vary:User-Agent をビューワーに返します。

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

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

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

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

  • Via – ディストリビューションは、ビューワーへの応答で値を次のように設定します。

    Via: http-versionalphanumeric-string.cloudfront.net (CloudFront)

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

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

最大ファイルサイズ

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

‬使用できないオリジン‭

オリジンサーバーが使用できないときに、ディストリビューションがエッジキャッシュに存在するオブジェクトのリクエストを受け取り、そのオブジェクトが (たとえば Cache-Control max-age ディレクティブに指定された期間が経過しているために) 有効期限切れになっている場合、ディストリビューションは有効期限切れバージョンのオブジェクトを供給するか、またはカスタムエラーページを供給します。

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

Redirects

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

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

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

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

転送エンコード

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

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

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

追加情報

Lightsail でディストリビューションを管理するのに役立つ記事をいくつか紹介します。