

# CloudFront のリクエストヘッダーを追加する
<a name="adding-cloudfront-headers"></a>

CloudFront がビューワーから受け取り、オリジンまたは[エッジ関数](edge-functions.md)に転送するリクエストに特定の HTTP ヘッダーを追加するように CloudFront を設定できます。これらの HTTP ヘッダーの値は、ビューワーまたはビューワーリクエストの特性に基づいています。ヘッダーは、ビューワーのデバイスタイプ、IP アドレス、地理的位置、リクエストプロトコル (HTTP または HTTPS)、HTTP バージョン、TLS 接続の詳細、[JA3 フィンガープリント](https://github.com/salesforce/ja3)、および JA4 フィンガープリントに関する情報を提供します。WebSocket ヘッダーを転送するようにディストリビューションのキャッシュ動作を設定することもできます。詳細については、「[CloudFront ディストリビューションで WebSockets を使用する](distribution-working-with.websockets.md)」を参照してください。

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

キャッシュキーにこれらのヘッダーを含めるには、*キャッシュポリシー*を使用します。詳細については、「[ポリシーを使用してキャッシュキーを制御する](controlling-the-cache-key.md)」および「[キャッシュキーを理解する](understanding-the-cache-key.md)」を参照してください。

オリジンでヘッダーを受信するが、キャッシュキーに含めないようにするには、*オリジンリクエストポリシー*を使用します。詳細については、「[ポリシーを使用してオリジンリクエストを制御する](controlling-origin-requests.md)」を参照してください。

**Topics**
+ [デバイスタイプヘッダー](#cloudfront-headers-device-type)
+ [ビューワーの場所ヘッダー](#cloudfront-headers-viewer-location)
+ [ビューワーのヘッダー構造を確認するためのヘッダー](#cloudfront-headers-viewer-headers)
+ [TLS 関連のヘッダー](#tls-related-versions)
+ [その他の CloudFront ヘッダー](#cloudfront-headers-other)

## デバイスタイプヘッダー
<a name="cloudfront-headers-device-type"></a>

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

## ビューワーの場所ヘッダー
<a name="cloudfront-headers-viewer-location"></a>

ビューワーの場所を特定するために、以下のヘッダーが追加できます。CloudFront は、ビューワーの IP アドレスに基づいてこれらのヘッダーの値を決定します。これらのヘッダーの値が ASCII 以外の文字の場合、CloudFront パーセントは [RFC 3986 のセクション 1.2](https://tools.ietf.org/html/rfc3986#section-2.1) に従って文字をパーセントエンコードします。
+ `CloudFront-Viewer-Address` – ビューワーの IP アドレスと、リクエストのソースポートを示します。例えば、`198.51.100.10:46532` のヘッダー値は、ビューワーの IP アドレスが 198.51.100.10 で、リクエストのソースポートが 46532 であることを意味します。
+ `CloudFront-Viewer-ASN` — ビューワーの AS 番号 (ASN) を示します。
**注記**  
`CloudFront-Viewer-Address` と `CloudFront-Viewer-ASN` は、オリジンリクエストポリシーで追加できますが、キャッシュポリシーでは追加できません。
+ `CloudFront-Viewer-Country` - ビューワーの国の 2 文字の国コードが含まれています。国コードの一覧については、「[ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)」を参照してください。
+ `CloudFront-Viewer-City` - ビューワーの市区町村名が含まれています。

以下のヘッダーを追加すると、CloudFrontは、AWS ネットワークから発信されたリクエストを*除く*すべてのリクエストにそれらを適用します。
+ `CloudFront-Viewer-Country-Name` - ビューワーの国名が含まれています。
+ `CloudFront-Viewer-Country-Region` - ビューワーのリージョンを表すコード (最大 3 文字) が含まれています。地域は、[ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2)コードの第 1 レベルのサブディビジョン (最も広いまたは狭い) です。
+ `CloudFront-Viewer-Country-Region-Name` - ビューワーのリージョン名が含まれています。地域は、[ISO 3166-2](https://en.wikipedia.org/wiki/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`) で](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)、ビューワーのタイムゾーンが含まれています。

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

## ビューワーのヘッダー構造を確認するためのヘッダー
<a name="cloudfront-headers-viewer-headers"></a>

送信するヘッダーに基づいてビューワーを特定しやすくするために、以下のヘッダーを追加できます。例えば、異なるブラウザごとに 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` — ビューワーのヘッダーの総数を示します。

## TLS 関連のヘッダー
<a name="tls-related-versions"></a>

以下のヘッダーを追加して、ビューワーの JA3 フィンガープリント、JA4 フィンガープリント、TLS 接続の詳細を確認できます。
+ `CloudFront-Viewer-JA3-Fingerprint` — ビューワーの [JA3 フィンガープリント](https://github.com/salesforce/ja3)を示します。JA3 フィンガープリントは、既知のクライアントからのリクエストであるか、マルウェアまたは悪意のあるボットであるか、想定された (許可リストに登録されている) アプリケーションであるかを判断するのに役立ちます。
+ `CloudFront-Viewer-JA4-Fingerprint` — ビューワーの JA4 フィンガープリントを示します。[JA4 フィンガープリント](https://github.com/FoxIO-LLC/ja4)は、JA3 フィンガープリントと同じように、リクエストが既知のクライアントからのものであるか、マルウェアまたは悪意のあるボットであるか、予期される (許可リストに登録されている) アプリケーションであるかを確認するのに役立ちます。フィンガープリントを使用して、HTTP リクエストを検査するときに適用する既知の良いアクターと悪いアクターのデータベースを構築できます。次に、アプリケーションウェブサーバーまたは [Lambda@Edge](lambda-at-the-edge.md) や [CloudFront Functions](cloudfront-functions.md) でヘッダー値を検査し、ヘッダー値と既知のマルウェアフィンガープリントのリストを比較して、悪意のあるクライアントをブロックできます。
+ `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 との間でサポートされているプロトコルと暗号](secure-connections-supported-viewer-protocols-ciphers.md)」を参照してください。

**注意事項**  
JA3 および JA4 フィンガープリントは SSL/TLS `Client Hello` パケットから取得します。これらは HTTPS リクエストにのみ存在します。
これらの TLS 関連のヘッダーは、[オリジンリクエストポリシー](controlling-origin-requests.md)には追加できますが、[キャッシュポリシー](controlling-the-cache-key.md)には追加できません。

## その他の CloudFront ヘッダー
<a name="cloudfront-headers-other"></a>

以下のヘッダーを追加すると、ビューワーの元のリクエスト URI、元のリクエストクエリ文字列パラメータおよび値、プロトコル、バージョンを確認できます。
+ `CloudFront-Error-Uri` – ビューワーから受信した元のリクエスト URI を示します。
+ `CloudFront-Error-Args` – 元のリクエストクエリ文字列のパラメータと値を示します。
+ `CloudFront-Forwarded-Proto` - ビューワーのリクエストのプロトコル (HTTP または HTTPS) を示します。
+ `CloudFront-Viewer-Http-Version` - ビューワーのリクエストの HTTP バージョンを示します。