瞭解回應標頭政策 - Amazon CloudFront

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

瞭解回應標頭政策

您可以使用回應標頭政策來指定 Amazon 在傳送給檢視者的回應中 CloudFront 移除或新增的HTTP標頭。如需回應標頭政策及其使用原因的詳細資訊,請參閱使用政策在 CloudFront回應中新增或移除 HTTP 標頭

下列主題說明回應標頭政策中的設定。這些設定分為多個類別,下列主題中依次介紹這些類別。

政策詳細資訊 (中繼資料)

政策詳細資訊設定包含回應標頭政策的中繼資料。

  • 名稱 - 用來識別回應標頭政策的名稱。在主控台中,您可以使用名稱將政策連接至快取行為。

  • 描述(選用) - 用來描述回應標頭政策的註解。這是選用的設定,但它可以協助您識別政策的目的。

CORS標頭

跨來源資源共用 (CORS) 設定可讓您在回應CORS標頭策略中新增和設定標頭。

此清單著重於如何在回應標頭政策中指定設定和有效值。如需有關這些標頭的詳細資訊,以及這些標頭如何用於實際CORS要求和回應,請參閱 MDN Web 文件中的跨來源資源共用和通訊CORS協定規格

Access-Control-Allow-Credentials

這是一個布爾設置(truefalse),用於確定是否在響應CORS請求中 CloudFront 添加Access-Control-Allow-Credentials標題。當此設定設定為時true,會在CORS要求的回應中 CloudFront 新增Access-Control-Allow-Credentials: true標頭。否 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預檢要求時做為Access-Control-Allow-Methods標頭值的HTTP方法。 CloudFront 有效值為GETDELETEHEADOPTIONSPATCHPOSTPUT、和ALLALL是包含所有列出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要求時做為Access-Control-Expose-Headers標頭值 CloudFront 使用的標頭名稱。此設定的有效值包括HTTP標頭名稱或萬用字元 (*)。

Access-Control-Max-Age

秒數, CloudFront 用作回應CORS預檢要求時的Access-Control-Max-Age標頭值。

覆寫原始伺服器

Boolean 設定,可決定來自來源的回應包含原則中的其中一個CORS標頭時的 CloudFront 行為方式。

  • 當設定為true且來源回應包含同樣位於原則中的CORS標頭時,會 CloudFront 將原則中的CORS標頭新增至回應。 CloudFront 然後將該響應發送給查看者。 CloudFront 忽略它從原點接收到的標題。

  • 當設定為false且來源回應包含CORS標頭 (無論標CORS頭是否在原則中) 時,會 CloudFront 包含從來源接收到回應的CORS標頭。 CloudFront 不會將原則中的任何CORS標頭新增至傳送給檢視者的回應。

安全性標頭

您可以使用安全性標頭設定,在HTTP回應標頭原則中新增和設定數個安全性相關的回應標頭。

這份清單會說明如何在回應標頭政策中指定設定和有效值,如需這些標頭的詳細資訊,以及這些標頭如何用於真實HTTP回應,請參閱 MDN Web 文件的連結。

Content-Security-Policy

指定 CloudFront 用作Content-Security-Policy回應標頭值的內容安全性原則指示詞。

如需有關此標頭和有效原則指示詞的詳細資訊,請參閱 MDN Web 文件Content-Security-Policy中的。

注意

Content-Security-Policy 標頭值限制為 1783 個字元。

推薦網站政策

指定 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指令的值

  • Boolean 設定 (truefalse)preload,用於決定是否在此標頭的值中 CloudFront 包含preload指示詞

  • Boolean 設定 (truefalse)includeSubDomains,用於決定是否在此標頭的值中 CloudFront包含includeSubDomains指示詞

如需有關此標頭和這些指示詞的詳細資訊,請參閱 MDN Web 文件Strict-Transport-Security中的。

X-Content-Type-Options

這是一個布爾設置(truefalse),用於確定是否 CloudFront 將標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回應標頭值的指示詞。此設定的有效值為 DENYSAMEORIGIN

如需有關此標頭和這些指示詞的詳細資訊,請參閱 MDN Web 文件X-Frame-Options中的。

X-XSS 保護

指定 CloudFront 用來做為X-XSS-Protection回應標頭值的指令和設定。對於此設定,您可以分別指定:

  • X-XSS-Protection設定 0 (停用XSS篩選) 或 1 (啟用XSS篩選)

  • Boolean 設定 (truefalse)block,可決定此標頭的值中是否 CloudFront 包含mode=block指示詞

  • 一個報告URI,它確定是否 CloudFront 包括該report=reporting URI指令在該標頭的值

您可以指trueblock,也可以指定報告URI,但不能同時指定兩者。如需有關此標頭和這些指示詞的詳細資訊,請參閱 MDN Web 文件X-XSS-Protection中的。

覆寫原始伺服器

這些安全標頭設置中的每一個都包含一個布爾設置(truefalse),該設置可確定當來源響應包含該標頭時的 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 接收的ServerDate標頭,這樣這些標頭 (從來源接收) 就不會包含在 CloudFront 傳送給檢視者的回應中。不過,如果您這麼做,請在傳送給檢視者的回覆中 CloudFront 新增自己的這些標頭版本。對於 CloudFront添加的Server標題,標題的值是CloudFront

您無法移除的標頭

您無法使用回應標頭政策移除下列標頭。如果您在回應標頭原則的 [移除標頭] 區段中指定這些標頭 (ResponseHeadersPolicyRemoveHeadersConfig在中API),就會收到錯誤訊息。

  • 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頭設定,在傳送來源的HTTP回應中啟用Server-Timing標頭 CloudFront。您可以使用此標頭來查看指標,以幫助您獲得有關以及來源行為 CloudFront 和性能的見解。例如,您可以查看哪個快取層出現了快取命中,或是在發生快取遺漏時,查看來自原始伺服器的第一個位元組延遲時間。Server-Timing標頭中的指標可協助您疑難排解問題或測試 CloudFront 或來源組態的效率。

如需將Server-Timing標頭搭配使用的詳細資訊 CloudFront,請參閱下列主題。

如要啟用 Server-Timing 標頭,請建立 (或編輯) 回應標頭政策

取樣率和 Pragma 請求標頭

您在回應標頭政策中啟用 Server-Timing 標頭後,還可以指定抽樣率。採樣率是 0-100(含)的數字,它指定了要 CloudFront 添加Server-Timing標題的響應百分比。當您將取樣率設定為 100 時,會 CloudFront 將標Server-Timing頭新增至HTTP回應標頭原則所附加之快取行為的每個要求的回應。當您將其設定為 50 時,會 CloudFront 將標頭新增至符合快取行為之要求的 50% 回應。您可以將抽樣率設定為 0 至 100 之間的任何數值,最多可精確到小數點後四位數字。

當採樣率設定為小於 100 的數字時,您無法控制要將Server-Timing標頭 CloudFront 新增至哪些回應,只能控制百分比。不過,您可以server-timing在HTTP要求中新增具有設定值的Server-Timing標頭,以便在回應該要求時接收標頭。Pragma無論抽樣率設為多少都一樣;即使採樣率設置為零(0),如果請求包含標Server-Timing頭,則將標Pragma: server-timing頭 CloudFront 添加到響應中。

來自原始伺服器的 Server-Timing 標頭

當存在快取未命中並將要求 CloudFront 轉送至原始位置時,來源可能會在其回應中包含Server-Timing標頭。 CloudFront在此情況下,會 CloudFront 將其度量新增至從來源接收的Server-Timing標頭。 CloudFront 傳送給檢視器的回應包含單一Server-Timing標頭,其中包含來自來源的值以及 CloudFront 新增的量度。來自來源的標頭值可能位於結尾,或介於兩組 CloudFront 新增至標頭的量度之間。

當有快取命中時, CloudFront 傳送給檢視器的回應會包含單一Server-Timing標頭,其中只包含標頭值中的 CloudFront 度量 (不包括來源的值)。

Server-Timing 標頭指標

Server-Timing標頭 CloudFront 新增至HTTP回應時,標頭的值會包含一或多個量度,可協助您深入瞭解以及來源的行為 CloudFront 和效能。以下清單包含所有指標及其可能的值;標Server-Timing頭僅包含其中一些指標,具體取決於請求和響應的性質 CloudFront。

Server-Timing 標頭中的部分指標僅有名稱 (沒有值),有些指標則有名稱和一個值。如果指標具有值,名稱和值之間會以半形分號分隔 (;);假如標頭包含多個指標,則各個指標之間會以半形逗號分隔 (,)。

cdn-cache-hit

CloudFront 提供了來自緩存的響應,而不向原點發出請求。

cdn-cache-refresh

CloudFront 在向原點發送請求後,提供了緩存中的響應,以驗證緩存對象是否仍然有效。在這種情況下, CloudFront 沒有從原點檢索完整的對象。

cdn-cache-miss

CloudFront 沒有提供來自緩存的響應。在這種情況下,在返回響應之前從來源 CloudFront請求完整對象。

cdn-pop

包含描述哪個存在 CloudFront 點 (POP) 處理要求的值。

cdn-rid

包含具有請求 CloudFront 唯一識別碼的值。在疑難排解問題時,您可以使用此要求識別碼 (RID) Support

cdn-hit-layer

當 CloudFront 提供快取回應而未向來源提出要求時,就會顯示此測量結果。包含以下其中一個值:

cdn-upstream-layer

當從來源 CloudFront 要求完整物件時,會顯示此測量結果,且包含下列其中一個值:

  • EDGE— 位POP置將請求直接發送到原點。

  • REC— 位REC置將請求直接發送到原點。

  • 起源 Shield 牌 — 作為起源 Shield 牌的作用將請求直接發送到原點。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 點 (POP) 位置 (cdn-upstream-layer;desc="EDGE") 傳送的。

  • CloudFront 使用了來源(cdn-upstream-dns;dur=0)的緩存DNS結果。

  • 完成TCP(如果適用的話)連接到 origin(cdn-upstream-connect;dur=114)需 CloudFront 要 114 毫秒。TLS

  • 完成 request (cdn-upstream-fbl;dur=177) 後,從來源接收響應的第一個字節需 CloudFront 要 177 毫秒。

  • 請求的對象不在 CloudFront的緩存(cdn-cache-miss)中。

  • 請求是由 PHX50-C2 代碼識別的節點接收的 (cdn-pop;desc="PHX50-C2")。

  • 此要求的 CloudFront 唯一識別碼為 yNPsyYn7skvTzwWkq3Wcc8Nj_foxUjQUe9H1ifslzWhb0w7aLbFvGg== (cdn-rid;desc="yNPsyYn7skvTzwWkq3Wcc8Nj_foxUjQUe9H1ifslzWhb0w7aLbFvGg==")。

  • 收 CloudFront 到查看器請求(cdn-downstream-fbl;dur=436)後,將響應的第一個字節發送給查看器花了 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 唯一識別碼為 nQBz4aJU2kP9iC3KHEq7vFxfMozu-VYBwGzkW9diOpeVc7xsrLKj-g== (cdn-rid;desc="nQBz4aJU2kP9iC3KHEq7vFxfMozu-VYBwGzkW9diOpeVc7xsrLKj-g==")。

  • 請求的對象緩存在區域邊緣緩存(REC)位置(cdn-hit-layer;desc="REC")中。

  • 收 CloudFront 到查看器請求(cdn-downstream-fbl;dur=137)後,將響應的第一個字節發送給查看器花費 137 毫秒。