レスポンスヘッダーポリシーを理解する - Amazon CloudFront

レスポンスヘッダーポリシーを理解する

レスポンスヘッダーポリシーを使用して、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: true CORS リクエストへのレスポンスのヘッダーが追加されます。そうしないと、このヘッダーは CloudFront によってレスポンスに追加されません。

Access-Control-Allow-Headers

CORS のプリフライトリクエストへのレスポンスで、CloudFront が Access-Control-Allow-Headers ヘッダーの値として使用するヘッダー名を指定します。この設定の有効な値には、HTTP ヘッダー名、またはすべてのヘッダーを許可することを示すワイルドカード文字 (*) が含まれます。

注記

Authorization ヘッダーではワイルドカードを使用できないため、明示的にリストする必要があります。

ワイルドカード文字の有効な使用例
一致する 一致しない

x-amz-*

x-amz-test

x-amz-

x-amz

x-*-amz

x-test-amz

x--amz

* Authorization を除くすべてのヘッダー Authorization
Access-Control-Allow-Methods

CORS のプリフライトリクエストへのレスポンスで、CloudFront が Access-Control-Allow-Methods ヘッダーの値として使用する HTTP メソッドを指定します。有効な値は、GETDELETEHEADOPTIONSPATCHPOSTPUTALL です。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.org

http://www.example.org

http://test.example.org

http://test.example.org:123

https://test.example.org

https://test.example.org:123

*.example.org

test.example.org

test.test.example.org

.example.org

http://test.example.org

https://test.example.org

http://test.example.org:123

https://test.example.org:123

example.org

http://example.org

https://example.org

http://example.org

https://example.org

http://example.org:123

http://example.org:*

http://example.org:123

http://example.org

http://example.org:1*3

http://example.org:123

http://example.org:1893

http://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-referrerno-referrer-when-downgradeoriginorigin-when-cross-originsame-originstrict-originstrict-origin-when-cross-originunsafe-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=reporting URI ディレクティブを含めるかどうかを決定するレポートの 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-ByVary などのヘッダーを削除し、これらのヘッダーを削除したレスポンスを 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) は、AWS Support に関する問題のトラブルシューティングに使用できます。

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)。