

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

# Lightsail ディストリビューションのリクエストとレスポンスの動作を管理する
<a name="amazon-lightsail-distribution-request-and-response"></a>

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

**トピック**
+ [ディストリビューションがリクエストを処理してオリジンに転送する方法](#distribution-process-and-forward-requests)
+ [ディストリビューションがオリジンからの応答を処理する方法](#distribution-process-responses)

## ディストリビューションがリクエストを処理してオリジンに転送する方法
<a name="distribution-process-and-forward-requests"></a>

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

**目次**
+ [認証](#RequestCustomClientAuth)
+ [キャッシュ期間](#RequestCustomCaching)
+ [クライアント IP アドレス](#RequestCustomIPAddresses)
+ [クライアント側の SSL 認証](#RequestCustomClientSideSslAuth)
+ [圧縮](#RequestCustomCompression)
+ [条件付きリクエスト](#RequestCustomConditionalGETs)
+ [cookie](#RequestCustomCookies)
+ [クロスオリジンリソース共有 (CORS)](#request-custom-cors)
+ [暗号化](#RequestCustomEncryption)
+ [本文を含む GET リクエスト](#RequestCustom-get-body)
+ [HTTP メソッド](#RequestCustomHTTPMethods)
+ [HTTP リクエストヘッダーとディストリビューション動作](#request-custom-headers-behavior)
+ [HTTP バージョン](#RequestCustomHTTPVersion)
+ [リクエストの最大長と URL の最大長](#RequestCustomMaxRequestStringLength)
+ [OCSP Stapling](#request-custom-ocsp-stapling)
+ [持続的接続](#request-custom-persistent-connections)
+ [プロトコル](#RequestCustomProtocols)
+ [クエリ文字列](#RequestCustomQueryStrings)
+ [オリジン接続のタイムアウトと試行](#custom-origin-timeout-attempts)
+ [オリジン応答タイムアウト](#request-custom-request-timeout)
+ [同じオブジェクト (トラフィックスパイク) の同時リクエスト](#request-custom-traffic-spikes)
+ [ユーザーエージェントヘッダー](#request-custom-user-agent-header)

### 認証
<a name="RequestCustomClientAuth"></a>

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

`OPTIONS` リクエストの場合、次のディストリビューション設定を使用した場合のみ、クライアント認証を要求するようにオリジンサーバーを設定することができます。
+ `Authorization` ヘッダーをオリジンに転送するようにディストリビューションを設定する。
+ `OPTIONS` リクエストへの応答をキャッシュしないようにディストリビューションを設定する。

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

### キャッシュ期間
<a name="RequestCustomCaching"></a>

ディストリビューションが別のリクエストをオリジンに転送するまでにオブジェクトをキャッシュに保持する時間をコントロールするには :
+ `Cache-Control` または `Expires` ヘッダーフィールドを各オブジェクトに追加するようにオリジンを構成します。
+ キャッシュ寿命 (TTL) には、デフォルト値の 1 日を使用します。

ディストリビューション設定の詳細については、[「ディストリビューションアドバンスト設定」](https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-changing-default-cache-behavior#changing-caching-behavior-distribution-advanced-settings)を参照してください。

### クライアント IP アドレス
<a name="RequestCustomIPAddresses"></a>

ビューワーがリクエストをディストリビューションに送信し、`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 認証
<a name="RequestCustomClientSideSslAuth"></a>

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

### Compression
<a name="RequestCustomCompression"></a>

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

### 条件付きリクエスト
<a name="RequestCustomConditionalGETs"></a>

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

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

### cookie
<a name="RequestCustomCookies"></a>

Cookie をオリジンに転送するようにディストリビューションを構成できます。詳細については、[「ディストリビューションアドバンスト設定」](https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-changing-default-cache-behavior#changing-caching-behavior-distribution-advanced-settings)を参照してください。

### クロスオリジンリソース共有 (CORS)
<a name="request-custom-cors"></a>

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

### 暗号化
<a name="RequestCustomEncryption"></a>

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

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

### ‬本文を含む GET リクエスト‭
<a name="RequestCustom-get-body"></a>

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

### HTTP メソッド
<a name="RequestCustomHTTPMethods"></a>

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

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

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

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

### HTTP リクエストヘッダーとディストリビューション動作
<a name="request-custom-headers-behavior"></a>

次の表は、オリジンに転送できる HTTP リクエストヘッダーを示しています (例外も注記されています)。この表には、各ヘッダーについて以下に関する情報も含まれています。
+ **サポート** - そのヘッダーの値に基づいてオブジェクトをキャッシュするようにディストリビューションを設定できるかどうか。

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

  **サポート - あり**

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

  **サポート - あり**

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

  **サポート - あり**

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

  **サポート - あり**

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

  **サポート - あり**

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

  **サポート - あり**

  **設定されていない場合の動作**:
  + `GET`、`HEAD` の各リクエスト – ディストリビューションは、リクエストをオリジンに転送する前に `Authorization` ヘッダーフィールドを削除します。
  + `OPTIONS` リクエスト – `OPTIONS` リクエストへの応答をキャッシュするようにディストリビューションを設定した場合、ディストリビューションは、リクエストをオリジンに転送する前に、`Authorization` ヘッダーフィールドを削除します。

    OPTIONS リクエストへの応答をキャッシュするようにディストリビューションを設定しなかった場合、ディストリビューションは `Authorization` ヘッダーフィールドをオリジンに転送します。
  + `DELETE`、`PATCH`、`POST`、`PUT` の各リクエスト – ディストリビューションは、リクエストをオリジンに転送する前にヘッダーフィールドを削除しません。
+ **ヘッダー** - `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 バージョン
<a name="RequestCustomHTTPVersion"></a>

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

### リクエストの最大長と URL の最大長
<a name="RequestCustomMaxRequestStringLength"></a>

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

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

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

### OCSP Stapling
<a name="request-custom-ocsp-stapling"></a>

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

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

### 永続的接続
<a name="request-custom-persistent-connections"></a>

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

### プロトコル
<a name="RequestCustomProtocols"></a>

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

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

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

### クエリ文字列
<a name="RequestCustomQueryStrings"></a>

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

### オリジン接続のタイムアウトと試行
<a name="custom-origin-timeout-attempts"></a>

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



### オリジン応答タイムアウト
<a name="request-custom-request-timeout"></a>

オリジン応答タイムアウト (オリジンの読み取りタイムアウトまたはオリジンリクエストタイムアウトとも呼ばれます) は、次の両方に適用されます。
+ ディストリビューションがリクエストをオリジンに転送してからレスポンスを受け取るまでの待機時間 (秒)
+ ディストリビューションがオリジンからレスポンスのパケットを受け取ってから次のパケットを受け取るまでの待機時間 (秒)

ディストリビューションの動作は、ビューワーリクエストの HTTP メソッドによって決まります。
+ `GET` および `HEAD` リクエスト ― 応答タイムアウトの期間内にオリジンが応答しない場合、または応答を停止した場合、ディストリビューションは接続を中断します。指定されたオリジン接続の試行回数が 1 回を超える場合、ディストリビューションは完全な応答の取得を再試行します。オリジン接続の試行回数設定の値で決められているように、ディストリビューションは最大 3 回試行します。最後の試行でもオリジンが応答しない場合、ディストリビューションは同じオリジンのコンテンツに対する別のリクエストを受け取るまで接続を試みません。
+ `DELETE`、`OPTIONS`、`PATCH`、`PUT`、`POST` の各リクエスト – オリジンが 30 秒以内に応答しない場合、ディストリビューションは接続を中断し、オリジンへの接続を再試行しません。クライアントは、必要に応じてリクエストを再送信できます。

### 同じオブジェクト (トラフィックスパイク) の同時リクエスト
<a name="request-custom-traffic-spikes"></a>

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

### ユーザーエージェントヘッダー
<a name="request-custom-user-agent-header"></a>

ユーザーがコンテンツの表示に使用しているデバイスに基づいて、オブジェクトの異なるバージョンを ディストリビューションでキャッシュするには、次の 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-Viewer` と `CloudFront-Is-Tablet-Viewer` の両方を `true` に設定する場合があります。

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

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

`User-Agent = Amazon CloudFront`

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

## ディストリビューションがオリジンからの応答を処理する仕組み
<a name="distribution-process-responses"></a>

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

**目次**
+ [100-continue レスポンス](#Response100Continue)
+ [キャッシュ](#ResponseCustomCaching)
+ [キャンセルされたリクエスト](#response-custom-canceled-requests)
+ [コンテンツネゴシエーション](#ResponseCustomContentNegotiation)
+ [cookie](#ResponseCustomCookies)
+ [切断された TCP 接続](#ResponseCustomDroppedTCPConnections)
+ [ディストリビューションが削除または置き換える HTTP レスポンスヘッダー](#ResponseCustomRemovedHeaders)
+ [最大ファイルサイズ](#ResponseCustomMaxFileSize)
+ [使用できないオリジン](#ResponseCustomOriginUnavailable)
+ [リダイレクト](#ResponseCustomRedirects)
+ [転送エンコード](#ResponseCustomTransferEncoding)

### 100-continue レスポンス
<a name="Response100Continue"></a>

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

### キャッシュ
<a name="ResponseCustomCaching"></a>
+ オリジンが `Date` および `Last-Modified` ヘッダーフィールドに有効かつ正確な値を設定していることを確認します。
+ ビューワーからのリクエストに `If-Match` または `If-None-Match` リクエストヘッダーフィールドが含まれる場合、`ETag` レスポンスヘッダーフィールドを設定します。`ETag` の値が指定されていない場合、ディストリビューションは以降の `If-Match` または `If-None-Match` ヘッダーを無視します。
+ 通常、ディストリビューションはオリジンからのレスポンスの `Cache-Control: no-cache` ヘッダーを優先します。例外については、[「同じオブジェクトに対する同時要求（トラフィックの急増）」](#request-custom-traffic-spikes)を参照してください。

### 取り消されたリクエスト
<a name="response-custom-canceled-requests"></a>

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

### コンテンツネゴシエーション
<a name="ResponseCustomContentNegotiation"></a>

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

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

### cookie
<a name="ResponseCustomCookies"></a>

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

### 切断された TCP 接続
<a name="ResponseCustomDroppedTCPConnections"></a>

オリジンがオブジェクトをディストリビューションに返している間にディストリビューションとオリジン間の TCP 接続が中断した場合、ディストリビューションの動作は、オリジンが `Content-Length` ヘッダーをレスポンスに含めたかどうかによって異なります。
+ **Content-Length ヘッダー** – ディストリビューションは、オブジェクトをオリジンから取得すると、ビューワーにオブジェクトを返します。ただし、`Content-Length` ヘッダーの値がオブジェクトのサイズに一致しない場合、ディストリビューションはオブジェクトをキャッシュしません。
+ **Transfer-Encoding: Chunked** – ディストリビューションは、オブジェクトをオリジンから取得すると、ビューワーにオブジェクトを返します。ただし、チャンクレスポンスが完了していない場合、ディストリビューションはオブジェクトをキャッシュしません。
+ **Content-Length ヘッダーなし** – ディストリビューションはオブジェクトをビューワーに返して、オブジェクトをキャッシュしますが、オブジェクトが完全でない可能性があります。`Content-Length` ヘッダーがない場合、ディストリビューションは、TCP 接続が誤って中断されたか、または故意に中断されたかを判断できません。

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

### ディストリビューションが削除または置き換える HTTP レスポンスヘッダー
<a name="ResponseCustomRemovedHeaders"></a>

ディストリビューションは、 オリジンからのレスポンスをビューワーに転送する前に、以下のヘッダーフィールドを削除または更新します。
+ `Set-Cookie` - Cookie を転送するようにディストリビューションを設定している場合、`Set-Cookie` ヘッダーフィールドがクライアントに転送されます。
+ `Trailer`
+ `Transfer-Encoding` - オリジンがこのヘッダーフィールドを返す場合、ディストリビューションは値を `chunked` に設定してからビューワーにレスポンスを返します。
+ `Upgrade`
+ `Vary` – 次の点に注意してください。
  + デバイス固有のヘッダーのいずれかをオリジン (`CloudFront-Is-Desktop-Viewer`、`CloudFront-Is-Mobile-Viewer`、`CloudFront-Is-SmartTV-Viewer`、`CloudFront-Is-Tablet-Viewer`) に転送するようにディストリビューションを設定しており、オリジンが `Vary:User-Agent` をディストリビューションに返すように設定している場合、ディストリビューションは `Vary:User-Agent` をビューワーに返します。
  + `Vary`ヘッダーに、`Accept-Encoding` または `Cookie` のいずれかを含めるよう設定した場合、ディストリビューションはビューワーへの応答にその値を含めます。
  + オリジンにヘッダーの許可リストを転送するように `Vary` ヘッダーを設定し、 (たとえば `Vary:Accept-Charset,Accept-Language` など ) ヘッダー名を返すようにオリジンを設定した場合、ディストリビューションはこれらの値を持つ `Vary` ヘッダーをビューワーに返します。
  + ディストリビューションが、`*` の `Vary` ヘッダーの値を処理するかについて詳しくは[「コンテンツネゴシエーション」](#ResponseCustomContentNegotiation)を参照してください。
  + `Vary` ヘッダーで他の値を返すようにオリジンを設定している場合、ディストリビューションは応答をビューワーに返す前にその値を削除します。
+ `Via` – ディストリビューションは、ビューワーへの応答で値を次のように設定します。

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

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

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

### 最大ファイルサイズ
<a name="ResponseCustomMaxFileSize"></a>

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

### ‬使用できないオリジン‭
<a name="ResponseCustomOriginUnavailable"></a>

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

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

### リダイレクト
<a name="ResponseCustomRedirects"></a>

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

リクエストを以下のどちらかの場所にリダイレクトするようにウェブサーバーを構成できます。
+ オリジンサーバーのオブジェクトの新しい URL。ビューワーが新しい URL へのリダイレクトに従う場合、ビューワーはディストリビューションをバイパスし、オリジンに直接アクセスします。つまり、オリジンにあるオブジェクトの新しい URL にリクエストをリダイレクトしないことをお勧めします。
+ オブジェクトの新しいディストリビューション URL。新しいディストリビューション URL を含むリクエストがビューワーから送信されると、ディストリビューションは、オリジンの新しい場所からオブジェクトを取得し、エッジロケーションにキャッシュした後、ビューワーにオブジェクトを返します。オブジェクトに対する以降のリクエストはエッジロケーションによって処理されます。これにより、オリジンのオブジェクトを要求するビューワーに関連するレイテンシーと負荷が回避されます。ただし、オブジェクトに対する新しいすべてのリクエストに、ディストリビューションへの 2 つのリクエストに対する料金がかかります。

### 転送エンコード
<a name="ResponseCustomTransferEncoding"></a>

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

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

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