CloudFront のリクエストヘッダーを追加する - Amazon CloudFront

CloudFront のリクエストヘッダーを追加する

CloudFront がビューワーから受け取り、オリジンまたはエッジ関数に転送するリクエストに特定の HTTP ヘッダーを追加するように CloudFront を設定できます。これらの HTTP ヘッダーの値は、ビューワーまたはビューワーリクエストの特性に基づいています。ヘッダーは、ビューワーのデバイスタイプ、IP アドレス、地理的位置、リクエストプロトコル (HTTP または HTTPS)、HTTP バージョン、TLS 接続の詳細、JA3 フィンガープリント、および JA4 フィンガープリントに関する情報を提供します。

これらのヘッダーを使用すると、オリジンまたはエッジ関数でビューワーに関する情報を受け取ることができ、この情報を特定するための独自のコードを記述する必要はありません。オリジンが、これらのヘッダーの情報に基づいてレスポンスを返す場合は、CloudFront が別のレスポンスを別々にキャッシュするように、それらをキャッシュキーに含めることができます。例えば、オリジンは、ビューワーが居住する国に基づく特定の言語のコンテンツや、特定のデバイスタイプに合わせたコンテンツで応答する場合があります。オリジンは、これらのヘッダーをログファイルに書き込むこともあります。ログファイルを使用して、ビューワーの場所、ビューワーのデバイスの種類などの情報を判断できます。

キャッシュキーにこれらのヘッダーを含めるには、キャッシュポリシーを使用します。詳細については、ポリシーを使用してキャッシュキーを制御するおよびキャッシュキーを理解するを参照してください。

オリジンでヘッダーを受信するが、キャッシュキーに含めないようにするには、オリジンリクエストポリシーを使用します。詳しくは、「ポリシーを使用してオリジンリクエストを制御する」を参照してください。

ビューワーのデバイスタイプを特定するためのヘッダー

ビューワーのデバイスタイプを特定するために、次のヘッダーが追加できます。User-Agent ヘッダーの値に基づいて、CloudFront はこれらのヘッダーの値を true または false に設定します。デバイスが複数のカテゴリに属していると、複数の値が true になる場合があります。例えば、一部のタブレットデバイスに対して、CloudFront が CloudFront-Is-Mobile-ViewerCloudFront-Is-Tablet-Viewer の両方を true に設定します。

  • CloudFront-Is-Android-Viewer - ビューワーが Android オペレーティングシステム搭載のデバイスであると CloudFront が判断すると、true に設定します。

  • CloudFront-Is-Desktop-Viewer - ビューワーがデスクトップデバイスであると CloudFront が判断すると、true に設定します。

  • CloudFront-Is-IOS-Viewer – ビューワーが iPhone、iPod touch、その他の iPad デバイスなど、Apple モバイルオペレーティングシステム搭載のデバイスであると CloudFront が判断すると、true に設定します。

  • CloudFront-Is-Mobile-Viewer - ビューワーがモバイルデバイスであると CloudFront が判断すると、true に設定します。

  • CloudFront-Is-SmartTV-Viewer - ビューワーがスマートテレビであると CloudFront が判断すると、true に設定します。

  • CloudFront-Is-Tablet-Viewer - ビューワーがタブレットであると CloudFront が判断すると、true に設定します。

ビューワーの場所を特定するためのヘッダー

ビューワーの場所を特定するために、以下のヘッダーが追加できます。CloudFront は、ビューワーの IP アドレスに基づいてこれらのヘッダーの値を決定します。これらのヘッダーの値が ASCII 以外の文字の場合、CloudFront パーセントは RFC 3986 のセクション 1.2 に従って文字をパーセントエンコードします。

  • CloudFront-Viewer-Address – ビューワーの IP アドレスと、リクエストのソースポートを示します。例えば、198.51.100.10:46532 のヘッダー値は、ビューワーの IP アドレスが 198.51.100.10 で、リクエストのソースポートが 46532 であることを意味します。

  • CloudFront-Viewer-ASN — ビューワーの AS 番号 (ASN) を示します。

    注記

    CloudFront-Viewer-AddressCloudFront-Viewer-ASN は、オリジンリクエストポリシーで追加できますが、キャッシュポリシーでは追加できません。

  • CloudFront-Viewer-Country - ビューワーの国の 2 文字の国コードが含まれています。国コードの一覧については、「ISO 3166-1 alpha-2」を参照してください。

  • CloudFront-Viewer-City - ビューワーの市区町村名が含まれています。

以下のヘッダーを追加すると、CloudFrontは、AWS ネットワークから発信されたリクエストを除くすべてのリクエストにそれらを適用します。

  • CloudFront-Viewer-Country-Name - ビューワーの国名が含まれています。

  • CloudFront-Viewer-Country-Region - ビューワーのリージョンを表すコード (最大 3 文字) が含まれています。地域は、ISO 3166-2コードの第 1 レベルのサブディビジョン (最も広いまたは狭い) です。

  • CloudFront-Viewer-Country-Region-Name - ビューワーのリージョン名が含まれています。地域は、ISO 3166-2コードの第 1 レベルのサブディビジョン (最も広いまたは狭い) です。

  • CloudFront-Viewer-Latitude - ビューワーのおよその緯度が含まれています。

  • CloudFront-Viewer-Longitude - ビューワーのおよその経度が含まれています。

  • CloudFront-Viewer-Metro-Code - ビューワーのメトロコードが含まれています。これは、ビューワーが米国にいる場合にのみ表示されます。

  • CloudFront-Viewer-Postal-Code - ビューワーの郵便番号が含まれています。

  • CloudFront-Viewer-Time-Zone IANA タイムゾーンデータベース形式 (例: America/Los_Angeles) で、ビューワーのタイムゾーンが含まれています。

注記

CloudFront-Viewer-CityCloudFront-Viewer-Metro-CodeCloudFront-Viewer-Postal-Code は、すべての IP アドレスで利用できるとは限りません。IP アドレスによっては、この情報を取得するための特異性を十分に地理的に特定できません。

ビューワーのヘッダー構造を特定するためのヘッダー

送信するヘッダーに基づいてビューワーを特定しやすくするために、以下のヘッダーを追加できます。例えば、異なるブラウザごとに HTTP ヘッダーを送信する順序は異なる場合があります。User-Agent ヘッダーに指定されているブラウザが、そのブラウザの想定されたヘッダーの順序と一致しない場合は、リクエストを拒否できます。また、CloudFront-Viewer-Header-Count 値が CloudFront-Viewer-Header-Order 内のヘッダー数と一致しない場合は、リクエストを拒否できます。

  • CloudFront-Viewer-Header-Order — ビューワーのヘッダー名をリクエスト順にコロンで区切って示します。例: CloudFront-Viewer-Header-Order: Host:User-Agent:Accept:Accept-Encoding。文字数の制限である 7,680 文字を超えるヘッダーは切り捨てられます。

  • CloudFront-Viewer-Header-Count — ビューワーのヘッダーの総数を示します。

その他の CloudFront ヘッダー

次のヘッダーを追加すると、ビューワーの元のリクエスト URI、元のリクエストクエリ文字列パラメータと値、プロトコル、バージョン、JA3 フィンガープリント、TLS 接続の詳細を判別できます。

  • CloudFront-Error-Args – ビューワーから受信した元のリクエスト URI を示します。

  • CloudFront-Error-Uri – 元のリクエストクエリ文字列のパラメータと値を示します。

  • CloudFront-Forwarded-Proto - ビューワーのリクエストのプロトコル (HTTP または HTTPS) を示します。

  • CloudFront-Viewer-Http-Version - ビューワーのリクエストの HTTP バージョンを示します。

  • CloudFront-Viewer-JA3-Fingerprint — ビューワーの JA3 フィンガープリントを示します。JA3 フィンガープリントは、既知のクライアントからのリクエストであるか、マルウェアまたは悪意のあるボットであるか、想定された (許可リストに登録されている) アプリケーションであるかを判断するのに役立ちます。このヘッダーは、ビューワーの SSL/TLS Client Hello パケットに依存し、HTTPS リクエスト専用となっています。

    注記

    CloudFront-Viewer-JA3-Fingerprint の追加は、オリジンリクエストポリシーではできますが、キャッシュポリシーではできません。

  • CloudFront-Viewer-TLS – SSL/TLS バージョン、暗号、およびビューアと CloudFront 間の接続に使用された SSL/TLS ハンドシェイクに関する情報が含まれています。ヘッダー値は次の形式です。

    SSL/TLS_version:cipher:handshake_information

    handshake_information の場合、ヘッダーには以下のいずれかの値が含まれます。

    • fullHandshake – SSL/TLS セッションに対して完全なハンドシェイクが実行された。

    • sessionResumed – 前の SSL/TLS セッションが再開された。

    • connectionReused – 前の SSL/TLS 接続が再利用された。

    以下に示しているのは、このヘッダーの値の例です。

    TLSv1.3:TLS_AES_128_GCM_SHA256:sessionResumed
    TLSv1.2:ECDHE-ECDSA-AES128-GCM-SHA256:connectionReused
    TLSv1.1:ECDHE-RSA-AES128-SHA256:fullHandshake
    TLSv1:ECDHE-RSA-AES256-SHA:fullHandshake

    このヘッダー値に含まれる SSL/TLS バージョンと暗号の完全なリストについては、「ビューワーと CloudFront との間でサポートされているプロトコルと暗号」を参照してください。

    注記

    CloudFront-Viewer-TLS の追加は、オリジンリクエストポリシーではできますが、キャッシュポリシーではできません。