レスポンスヘッダーポリシーを理解する
レスポンスヘッダーポリシーを使用して、Amazon CloudFront からビューワーに送信するレスポンスで削除または追加する HTTP ヘッダーを指定できます。レスポンスヘッダーポリシーおよびそれらを使用する理由の詳細については、「ポリシーを使用して CloudFront レスポンスの HTTP ヘッダーを追加または削除する」を参照してください。
以下のトピックでは、レスポンスヘッダーポリシーの設定について説明します。設定はカテゴリに分類され、そのことについて次のトピックで説明します。
ポリシーの詳細 (メタデータ)
ポリシーの詳細設定には、レスポンスヘッダーポリシーに関するメタデータが含まれます。
-
名前 - レスポンスヘッダーポリシーを識別するための名前。コンソールでは、名前を使用して、このポリシーをキャッシュ動作にアタッチします。
-
説明 (オプション) - レスポンスヘッダーポリシーを説明するコメント。これはオプションですが、このポリシーの目的を特定するのに役立ちます。
CORS ヘッダー
Cross-Origin Resource Sharing (CORS) 設定を使用して、レスポンスヘッダーポリシーに CORS ヘッダーを追加および設定できます。
このリストは、レスポンスヘッダーポリシーの設定および有効な値の指定方法に焦点を合わせています。これらの各ヘッダーと、実際の CORS リクエストとレスポンスの使用方法の詳細については、MDN ウェブドキュメントと CORS プロトコルの仕様
- Access-Control-Allow-Credentials
-
これは Boolean 設定 (
trueまたはfalse) で、CloudFront が CORS リクエストへのレスポンスにAccess-Control-Allow-Credentialsヘッダーを追加するかどうかを決定します。この設定がtrueに設定されている場合、CloudFront によってAccess-Control-Allow-Credentials: trueCORS リクエストへのレスポンスのヘッダーが追加されます。そうしないと、このヘッダーは CloudFront によってレスポンスに追加されません。 - Access-Control-Allow-Headers
-
CORS のプリフライトリクエストへのレスポンスで、CloudFront が
Access-Control-Allow-Headersヘッダーの値として使用するヘッダー名を指定します。この設定の有効な値には、HTTP ヘッダー名、またはすべてのヘッダーを許可することを示すワイルドカード文字 (*) が含まれます。注記
Authorizationヘッダーではワイルドカードを使用できないため、明示的にリストする必要があります。ワイルドカード文字の有効な使用例 例 一致する 一致しない x-amz-*x-amz-testx-amz-x-amzx-*-amzx-test-amzx--amz*Authorizationを除くすべてのヘッダーAuthorization - Access-Control-Allow-Methods
-
CORS のプリフライトリクエストへのレスポンスで、CloudFront が
Access-Control-Allow-Methodsヘッダーの値として使用する HTTP メソッドを指定します。有効な値は、GET、DELETE、HEAD、OPTIONS、PATCH、POST、PUT、ALLです。ALLは、リストされているすべての HTTP メソッドが含まれている特別な値です。 - Access-Control-Allow-Origin
-
CloudFront が
Access-Control-Allow-Originレスポンスヘッダーで使用できる値を指定します。この設定の有効な値には、特定のオリジン (http://www.example.comなど)、またはすべてのオリジンを許可することを示すワイルドカード文字 (*) が含まれます。メモ
-
ワイルドカード文字 (
*) は、ドメイン (*.example.org) の左端部分として使用できます。 -
ワイルドカード文字 (
*) は以下の位置では使用できません。-
最上位ドメイン (
example.*) -
サブドメインの右側 (
test.*.example.org) または任意のサブドメイン内 (*test.example.org) -
規約の内部 (
exa*mple.org)
-
ワイルドカード文字の使用方法の例については、次の表を参照してください。
例 一致する 一致しない http://*.example.orghttp://www.example.orghttp://test.example.orghttps://test.example.orghttps://test.example.org:123http://test.example.org:123*.example.orgtest.example.orgtest.test.example.org.example.orghttp://test.example.orghttps://test.example.orghttp://test.example.org:123https://test.example.org:123example.orghttp://example.orghttps://example.orghttp://example.orghttps://example.orghttp://example.org:123http://example.org:*http://example.org:123http://example.orghttp://example.org:1*3http://example.org:123http://example.org:1893http://example.org:13*.example.org:1*test.example.org:123 -
- Access-Control-Expose-Headers
-
CORS のプリフライトリクエストへのレスポンスで、CloudFront が
Access-Control-Expose-Headersヘッダーの値として使用するヘッダー名を指定します。この設定の有効な値には、HTTP ヘッダー名、またはワイルドカード文字 (*) が含まれます。 - Access-Control-Max-Age
-
CORS のプリフライトリクエストへのレスポンスで、CloudFront が
Access-Control-Max-Ageヘッダーの値として使用する秒数。 - オリジンのオーバーライド
-
オリジンからのレスポンスに含まれている CORS ヘッダーの 1 つがポリシー内にもある場合の CloudFront の動作方法を決定する Boolean 設定。
-
trueに設定されていて、オリジンレスポンスで、ポリシーにも CORS ヘッダーが含まれている場合、CloudFront は、レスポンスに対するポリシーの CORS ヘッダーを追加します。次に CloudFront はそのレスポンスをビューワーに送信します。CloudFront はオリジンから受け取ったヘッダーを無視します。 -
falseに設定されており、オリジンレスポンスに CORS ヘッダーが含まれている場合 (CORS ヘッダーがポリシーのものかどうかに関係なく)、CloudFront には、オリジンから受け取りレスポンスに送信する CORS ヘッダーが含まれます。CloudFront は、ビューワーに送信されるレスポンスにポリシー内の CORS ヘッダーを追加しません。
-
セキュリティヘッダー
セキュリティヘッダーの設定を使用して、レスポンスヘッダーポリシーでいくつかのセキュリティ関連の HTTP レスポンスヘッダーを追加および設定できます。
このリストは、レスポンスヘッダーポリシーの設定および有効な値の指定方法を示しています。これらの各ヘッダー、および実際の HTTP レスポンスでの使用方法の詳細については、MDN ウェブドキュメントへのリンクを参照してください。
- Content-Security-Policy
-
CloudFront が
Content-Security-Policyレスポンスヘッダーの値として使用するコンテンツセキュリティポリシーディレクティブを指定します。このヘッダーと有効なポリシーディレクティブの詳細については、MDN Web ドキュメントにある「Content-Security-Policy
」を参照してください。 注記
Content-Security-Policyヘッダー値は 1,783 文字に限定されます。 - リファラーポリシー
-
CloudFront が
Referrer-Policyレスポンスヘッダーの値として使用するリファラーポリシーディレクティブを指定します。この設定の有効値は、no-referrer、no-referrer-when-downgrade、origin、origin-when-cross-origin、same-origin、strict-origin、strict-origin-when-cross-origin、unsafe-urlです。このヘッダーおよびこれらのディレクティブの詳細については、MDN Web ドキュメントにある「Referrer-Policy
」を参照してください。 - Strict-Transport-Security
-
CloudFront が
Strict-Transport-Securityレスポンスヘッダーの値として使用するディレクティブおよび設定を指定します。この設定では、以下を個別に指定します。-
CloudFront がこのヘッダーの
max-ageディレクティブで値として使用する秒数 -
CloudFront がこのヘッダーの値に
preloadディレクティブを含めるかどうかを決定するpreloadの Boolean の設定 (trueまたはfalse) -
CloudFront がこのヘッダーの値に
trueディレクティブを含めるかどうかを決定するfalseの Boolean の設定 (includeSubDomainsまたはincludeSubDomains)
このヘッダーおよびこれらのディレクティブの詳細については、MDN Web ドキュメントにある「Strict-Transport-Security
」を参照してください。 -
- X-Content-Type-Options
-
これは Boolean 設定 (
trueまたはfalse) で、CloudFront が CORS リクエストへのレスポンスにX-Content-Type-Optionsヘッダーを追加するかどうかを決定します。この設定がtrueである場合、CloudFront によってレスポンスにX-Content-Type-Options: nosniffヘッダーが追加されます。そうしないと、このヘッダーは CloudFront によって追加されません。このヘッダーの詳細については、MDN Web ドキュメントにある「X-Content-Type-Options
」を参照してください。 - X-Frame-Options
-
CloudFront が
X-Frame-Optionsレスポンスヘッダーの値として使用するディレクティブを指定します。この設定の有効値は、DENYまたはSAMEORIGINです。このヘッダーおよびこれらのディレクティブの詳細については、MDN Web ドキュメントにある「X-Frame-Options
」を参照してください。 - X-XSS-Protection
-
CloudFront が
X-XSS-Protectionレスポンスヘッダーの値として使用するディレクティブおよび設定を指定します。この設定では、以下を個別に指定します。-
X-XSS-Protection(XSS フィルタリングを無効にする) または0(XSS フィルタリングを有効にする) についての1の設定設定 -
CloudFront がこのヘッダーの値に
trueディレクティブを含めるかどうかを決定するfalseの Boolean の設定 (blockまたはmode=block) -
CloudFront が、このヘッダーの値に
report=ディレクティブを含めるかどうかを決定するレポートの URIreporting URI
blockのためにtrueを指定することができます。または、レポートの URI を指定することもできますが、両方一緒に指定することはできません。このヘッダーおよびこれらのディレクティブの詳細については、MDN Web ドキュメントにある「X-XSS-Protection」を参照してください。 -
- オリジンのオーバーライド
-
これらの各セキュリティヘッダーの設定には、Boolean 設定 (
trueまたはfalse) が含まれ、オリジンからのレスポンスにそのヘッダーが含まれているときの CloudFront の動作を決定します。この設定が
trueに設定されていて、オリジンレスポンスにヘッダーが含まれている場合、CloudFront は、ビューワーに送信するレスポンスに対するポリシーのヘッダーを追加します。オリジンから受け取ったヘッダーは無視されます。この設定が
falseに設定されていて、オリジンレスポンスでヘッダーが含まれている場合、CloudFront には、ビューワーに送信するレスポンスでオリジンから受信したヘッダーが含まれます。オリジンレスポンスにヘッダーが含まれていない場合、CloudFront は、ビューワーに送信するレスポンスに対するポリシーのヘッダーを追加します。CloudFront は、この設定が
trueまたはfalseに設定されている場合に、この操作を実行します。
カスタムヘッダー
カスタムヘッダーの設定を使用して、レスポンスヘッダーポリシーでカスタム HTTP ヘッダーを追加および設定できます。CloudFront は、ビューワーに返すすべてのレスポンスに、これらのヘッダーを追加します。カスタムヘッダーごとにヘッダーの値も指定しますが、値の指定はオプションです。これは、CloudFront が値なしでレスポンスヘッダーを追加できるためです。
また各カスタムヘッダーには、独自のオリジンのオーバーライドの設定があります。
-
この設定が
trueに設定されていて、オリジンレスポンスで、ポリシーにもカスタムヘッダーが含まれている場合、CloudFront は、ビューワーに送信するレスポンスに対するポリシーのカスタムヘッダーを追加します。オリジンから受け取ったヘッダーは無視されます。 -
この設定が
falseであり、オリジンレスポンスで、ポリシーにカスタムヘッダーが含まれている場合、CloudFront には、ビューワーに送信するレスポンスでオリジンから受信したカスタムヘッダーが含まれます。 -
オリジンレスポンスで、ポリシーにもカスタムヘッダーが含まれていない場合、CloudFront は、ビューワーに送信するレスポンスに対するポリシーのカスタムヘッダーを追加します。CloudFront は、この設定が
trueまたはfalseに設定されている場合に、この操作を実行します。
ヘッダーを削除
CloudFront がオリジンから受信したレスポンスから削除するヘッダーを指定し、これらのヘッダーを含まないレスポンスを CloudFront からビューワーに送信できます。CloudFront は、オブジェクトの提供元が CloudFront のキャッシュであるか、オリジンであるかにかかわらず、ビューワーに送信するすべてのレスポンスからヘッダーを削除します。例えば、ブラウザで不要になった X-Powered-By や Vary などのヘッダーを削除し、これらのヘッダーを削除したレスポンスを CloudFront からビューワーに送信できます。
レスポンスヘッダーポリシーを使用して削除するヘッダーを指定すると、CloudFront はまずヘッダーを削除し、次にレスポンスヘッダーポリシーの他のセクション (CORS ヘッダー、セキュリティヘッダー、カスタムヘッダーなど) で指定されているヘッダーを追加します。削除するヘッダーを指定しても、同じヘッダーをポリシーの別のセクションに追加している場合は、そのヘッダーが含まれたレスポンスが CloudFront からビューワーに送信されます。
注記
レスポンスヘッダーポリシーを使用して、CloudFront がオリジンから受信した Server ヘッダーと Date ヘッダーを削除し、これらの (オリジンから受信した) ヘッダーを含まないレスポンスを CloudFront からビューワーに送信できます。ただし、これを行うと、これらのヘッダーの CloudFront 独自のバージョンはビューワーに送信するレスポンスに追加されます。CloudFront が追加する Server ヘッダーの場合、ヘッダーの値は CloudFront です。
削除できないヘッダー
以下のヘッダーは、レスポンスヘッダーポリシーを使用して削除することはできません。これらのヘッダーをレスポンスヘッダーポリシーの [Remove headers] (ヘッダーを削除) セクション (API の ResponseHeadersPolicyRemoveHeadersConfig) で指定すると、エラーが表示されます。
-
Connection -
Content-Encoding -
Content-Length -
Expect -
Host -
Keep-Alive -
Proxy-Authenticate -
Proxy-Authorization -
Proxy-Connection -
Trailer -
Transfer-Encoding -
Upgrade -
Via -
Warning -
X-Accel-Buffering -
X-Accel-Charset -
X-Accel-Limit-Rate -
X-Accel-Redirect -
X-Amz-Cf-.* -
X-Amzn-Auth -
X-Amzn-Cf-Billing -
X-Amzn-Cf-Id -
X-Amzn-Cf-Xff -
X-Amzn-ErrorType -
X-Amzn-Fle-Profile -
X-Amzn-Header-Count -
X-Amzn-Header-Order -
X-Amzn-Lambda-Integration-Tag -
X-Amzn-RequestId -
X-Cache -
X-Edge-.* -
X-Forwarded-Proto -
X-Real-Ip
Server-Timing ヘッダー
Server-Timing ヘッダー設定を使用して、CloudFront から送信された HTTP レスポンスの Server-Timing ヘッダーを有効にします。このヘッダーを使用して、CloudFront およびオリジンの動作とパフォーマンスに関するインサイトを得るのに役立つメトリクスを表示することができます。例えば、キャッシュヒットを処理したキャッシュレイヤーを確認できます。または、キャッシュミスがある場合に、オリジンからの最初のバイトレイテンシーを確認できます。Server-Timing ヘッダーのメトリクスは、CloudFront またはオリジンの設定における問題のトラブルシューティングや効率のテストに役立ちます。
CloudFront で Server-Timing ヘッダーを使用する方法の詳細については、次のセクションを参照してください。
Server-Timing ヘッダーを有効にするには、レスポンスヘッダーポリシーを作成 (または編集) します。
トピック
サンプリングレートと Pragma リクエストヘッダー
レスポンスヘッダーポリシーで Server-Timing ヘッダーを有効にするときは、サンプリングレートも指定します。サンプリングレートは、CloudFront が Server-Timing ヘッダーを追加するレスポンスの割合を指定する 0~100 の数値です。サンプリングレートを 100 に設定すると、CloudFront はレスポンスヘッダーポリシーがアタッチされているキャッシュ動作に一致するすべてのリクエストの HTTP レスポンスに、Server-Timing ヘッダーを追加します。50 に設定すると、CloudFront は、そのキャッシュ動作に一致するリクエストに対して、レスポンスの 50% にヘッダーを追加します。サンプリングレートは、0~100 の任意の数値 (小数点以下 4 桁まで) に設定できます。
サンプリングレートが 100 未満の数値に設定されている場合、CloudFront が Server-Timing ヘッダーを追加するレスポンスは制御できません。割合のみを制御できます。ただし、HTTP リクエストで値を server-timing に設定して Pragma ヘッダーを追加し、そのリクエストへのレスポンスで Server-Timing ヘッダーを受け取ることができます。これは、サンプリングレートの設定とは無関係に機能します。サンプリングレートがゼロ (0) に設定されている場合でも、リクエストに Pragma: server-timing ヘッダーが含まれていれば、CloudFront は Server-Timing ヘッダーをレスポンスに追加します。
オリジンからの Server-Timing ヘッダー
キャッシュミスがあり、CloudFront がリクエストをオリジンに転送すると、オリジンには、CloudFront へのレスポンスに Server-Timing ヘッダーが含まれている場合があります。この場合、CloudFront は、オリジンから受信した Server-Timing ヘッダーにメトリクスを追加します。CloudFront がビューワーに送信するレスポンスには、オリジンからの値と CloudFront が追加したメトリクスを含む単一の Server-Timing ヘッダーが含まれています。オリジンからのヘッダー値は、最後にある場合と、CloudFront がヘッダーに追加する 2 つのメトリクスセットの間にある場合があります。
キャッシュヒットが発生すると、CloudFront がビューワーに送信するレスポンスには、ヘッダー値に CloudFront メトリクスのみを含む単一の Server-Timing ヘッダーが含まれます (オリジンからの値は含まれません)。
Server-Timing ヘッダーのメトリクス
CloudFront が HTTP レスポンスに Server-Timing ヘッダーを追加する場合、ヘッダーの値には、CloudFront およびオリジンの動作とパフォーマンスに関するインサイトを得ることができる 1 つ以上のメトリクスが含まれます。次のリストには、すべてのメトリクスと想定される値が含まれています。Server-Timing ヘッダーには、CloudFront を介したリクエストとレスポンスの性質に応じて、これらのメトリクスの一部のみが含まれます。
これらのメトリクスのいくつかは、名前のみ (値なし) の Server-Timing ヘッダーに含まれます。その他は名前と価値です。メトリクスに値がある場合、名前と値はセミコロン (;) で区切られます。ヘッダーに複数のメトリクスが含まれている場合、メトリクスはカンマ (,) で区切られます。
- cdn-cache-hit
-
CloudFront は、オリジンに対してリクエストを行わずに、キャッシュからレスポンスを提供しました。
- cdn-cache-refresh
-
CloudFront は、リクエストをオリジンに送信してキャッシュされたオブジェクトがまだ有効であることを確認した後で、キャッシュからレスポンスを提供しました。この場合、CloudFront はオリジンから完全なオブジェクトを取得しませんでした。
- cdn-cache-miss
-
CloudFront はキャッシュからレスポンスを提供しませんでした。この場合、CloudFront はレスポンスを返す前にオリジンから完全なオブジェクトをリクエストしました。
- cdn-pop
-
CloudFront のどの Point of Presence (POP) がリクエストを処理したかを示す値が含まれます。
- cdn-rid
-
CloudFront の一意のリクエスト識別子を示す値が含まれます。このリクエスト識別子 (RID) は、サポート に関する問題のトラブルシューティングに使用できます。
- cdn-hit-layer
-
このメトリクスは、CloudFront がオリジンに対してリクエストを行わずにキャッシュからレスポンスを提供する場合に存在します。次のいずれかの値が含まれます。
-
EDGE – CloudFront は POP ロケーションからキャッシュされたレスポンスを提供しました。
-
REC – CloudFront は、リージョン別エッジキャッシュ (REC) ロケーションからキャッシュされたレスポンスを提供しました。
-
オリジンシールド – CloudFront は、オリジンシールドとして機能している REC からキャッシュされたレスポンスを提供しました。
-
- cdn-upstream-layer
-
このメトリクスは、CloudFront がオリジンに対して完全なオブジェクトをリクエストする場合に存在します。次のいずれかの値が含まれます。
-
EDGE – POP ロケーションがリクエストをオリジンに直接送信しました。
-
REC – REC ロケーションがリクエストをオリジンに直接送信しました。
-
オリジンシールド – オリジンシールドとして機能している REC が、リクエストをオリジンに直接送信しました。
-
- cdn-upstream-dns
-
オリジンの DNS レコードの取得にかかったミリ秒数を示す値が含まれます。値がゼロ (0) の場合、CloudFront がキャッシュされた DNS 結果を使用したか、既存の接続を再使用したことを示します。
- cdn-upstream-connect
-
オリジン DNS リクエストが完了してから、オリジンへの TCP 接続 (および該当する場合は TLS 接続) が完了するまでのミリ秒数を示す値が含まれます。値がゼロ (0) の場合、CloudFront が既存の接続を再使用したことを示します。
- cdn-upstream-fbl
-
オリジン HTTP リクエストが完了してから、オリジンからのレスポンスで最初のバイトを受信するまでのミリ秒数 (最初のバイトレイテンシー) を示す値が含まれます。
- cdn-downstream-fbl
-
エッジロケーションがリクエストの受信を終了してから、レスポンスの最初のバイトをビューワーに送信するまでのミリ秒を示す値が含まれます。
Server-Timing ヘッダーの例
Server-Timing ヘッダー設定が有効になっているときに、ビューワーが CloudFront から受信する可能性がある Server-Timing の例を以下に示します。
例 – キャッシュミス
リクエストされたオブジェクトが CloudFront キャッシュ内にないときにビューワーが受け取る可能性のある Server-Timing ヘッダーの例を以下に示します。
Server-Timing: cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=114,cdn-upstream-fbl;dur=177,cdn-cache-miss,cdn-pop;desc="PHX50-C2",cdn-rid;desc="yNPsyYn7skvTzwWkq3Wcc8Nj_foxUjQUe9H1ifslzWhb0w7aLbFvGg==",cdn-downstream-fbl;dur=436この Server-Timing ヘッダーは以下を示します。
-
オリジンリクエストが CloudFront Point of Presence (POP) ロケーション (
cdn-upstream-layer;desc="EDGE") から送信されたこと。 -
CloudFront はキャッシュされた DNS 結果をオリジン (
cdn-upstream-dns;dur=0) に使用しました。 -
CloudFront がオリジン(
cdn-upstream-connect;dur=114) への TCP (および該当する場合は TLS) 接続を完了するまでに 114 ミリ秒かかったこと。 -
リクエスト (
cdn-upstream-fbl;dur=177) の完了後、CloudFront がオリジンからレスポンスの最初のバイトを受信するまでに 177 ミリ秒かかったこと。 -
リクエストされたオブジェクトは CloudFront のキャッシュ (
cdn-cache-miss) にありませんでした。 -
リクエストは、コード
PHX50-C2(cdn-pop;desc="PHX50-C2") によって識別されるエッジロケーションで受信されました。 -
このリクエストの CloudFront の一意の ID は
yNPsyYn7skvTzwWkq3Wcc8Nj_foxUjQUe9H1ifslzWhb0w7aLbFvGg==(cdn-rid;desc="yNPsyYn7skvTzwWkq3Wcc8Nj_foxUjQUe9H1ifslzWhb0w7aLbFvGg==") でした。 -
ビューワーリクエストを受け取った後、CloudFront がレスポンスの最初のバイトをビューワーに送信するのに 436 ミリ秒かかったこと (
cdn-downstream-fbl;dur=436)。
例 – キャッシュヒット
リクエストされたオブジェクトが CloudFront キャッシュ内にあるときにビューワーが受け取る可能性のある Server-Timing ヘッダーの例を以下に示します。
Server-Timing: cdn-cache-hit,cdn-pop;desc="SEA19-C1",cdn-rid;desc="nQBz4aJU2kP9iC3KHEq7vFxfMozu-VYBwGzkW9diOpeVc7xsrLKj-g==",cdn-hit-layer;desc="REC",cdn-downstream-fbl;dur=137この Server-Timing ヘッダーは以下を示します。
-
リクエストされたオブジェクトはキャッシュ (
cdn-cache-hit) 内にありました。 -
リクエストは、コード
SEA19-C1(cdn-pop;desc="SEA19-C1") によって識別されるエッジロケーションで受信されました。 -
このリクエストの CloudFront の一意の ID は
nQBz4aJU2kP9iC3KHEq7vFxfMozu-VYBwGzkW9diOpeVc7xsrLKj-g==(cdn-rid;desc="nQBz4aJU2kP9iC3KHEq7vFxfMozu-VYBwGzkW9diOpeVc7xsrLKj-g==") でした。 -
リクエストされたオブジェクトは、リージョン別エッジキャッシュ (REC) ロケーション (
cdn-hit-layer;desc="REC") にキャッシュされました。 -
ビューワーリクエストを受け取った後、CloudFront がレスポンスの最初のバイトをビューワーに送信するのに 137 ミリ秒かかったこと (
cdn-downstream-fbl;dur=137)。