

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

# 在 CloudFront 回應中使用政策新增或移除 HTTP 標頭
<a name="modifying-response-headers"></a>

您可以設定 CloudFront，藉此修改傳送給檢視器之回應的 HTTP 標頭 (Web 瀏覽器及其他用戶端)。CloudFront 可以移除從原始伺服器接收的標頭，或在回應中新增標頭，再將回應傳送給檢視者。且不須編寫程式碼或變更來源，即可進行這些變更。

例如，您可以移除標頭 (例如 `X-Powered-By` 和 `Vary`)，如此一來，CloudFront 就不會在傳送給檢視者的回應中包含這些標頭。或者，您可以新增如下所示的 HTTP 標頭：
+ 新增 `Cache-Control` 標頭以控制瀏覽器快取。
+ 新增 `Access-Control-Allow-Origin` 標頭以啟用跨原始來源資源分享 (CORS)。您也可以新增其他 CORS 標頭。
+ 新增一組常見的安全性標頭，例如 `Strict-Transport-Security`、`Content-Security-Policy`、`X-Frame-Options` 等。
+ 新增 `Server-Timing` 標頭，以查看與透過 CloudFront 傳送的請求和回應相關的效能和路由資訊。

若要指定 CloudFront 移除或新增至 HTTP 回應的標頭，請使用 *response headers policy* (回應標頭政策)。將回應標頭政策連接到更多*快取行為*，CloudFront 會修改回應中的標頭，這些回應針對符合快取行為的請求傳送。CloudFront 會修改從快取中提供的回應以及 CloudFront 從原始伺服器轉送的回應之標頭。如果原始回應包含回應標頭政策中新增的一或多個標頭，則政策可以指定 CloudFront 應使用從原始伺服器接收的標頭，還是使用政策中的標頭覆寫該標頭。

**注意**  
如果您將控制瀏覽器快取的標頭新增至回應標頭政策 (例如 `Cache-Control`)，CloudFront 只會將這些標頭新增至*檢視器回應*。這些標頭不會影響 CloudFront 快取請求物件的方式。

CloudFront 會針對常見使用案例提供一些預先定義的回應標頭政策 (稱為*受管政策*)。您可以[使用這些受管政策](using-managed-response-headers-policies.md)，也可以建立您專屬的政策。您可以將單一回應標頭政策連接至 中多個分佈中的多個快取行為 AWS 帳戶。

如需詳細資訊，請參閱下列內容：

**Topics**
+ [了解回應標頭政策](understanding-response-headers-policies.md)
+ [建立回應標頭政策](creating-response-headers-policies.md)
+ [使用受管回應標頭政策](using-managed-response-headers-policies.md)

# 了解回應標頭政策
<a name="understanding-response-headers-policies"></a>

您可以使用回應標頭政策指定 Amazon CloudFront 對傳送給檢視者的回應所移除或新增的 HTTP 標頭。如需回應標頭政策及其使用原因的詳細資訊，請參閱[在 CloudFront 回應中使用政策新增或移除 HTTP 標頭](modifying-response-headers.md)。

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

**Topics**
+ [政策詳細資訊 (中繼資料)](#understanding-response-headers-policies-details)
+ [CORS 標頭](#understanding-response-headers-policies-cors)
+ [安全性標頭](#understanding-response-headers-policies-security)
+ [自訂標頭](#understanding-response-headers-policies-custom)
+ [移除標頭](#understanding-response-headers-policies-remove-headers)
+ [Server-Timing 標頭](#server-timing-header)

## 政策詳細資訊 (中繼資料)
<a name="understanding-response-headers-policies-details"></a>

政策詳細資訊設定包含回應標頭政策的中繼資料。
+ **名稱** - 用來識別回應標頭政策的名稱。在主控台中，您可以使用名稱將政策連接至快取行為。
+ **描述**(選用) - 用來描述回應標頭政策的註解。這是選用的設定，但它可以協助您識別政策的目的。

## CORS 標頭
<a name="understanding-response-headers-policies-cors"></a>

跨來源資源分享 (CORS) 設定可讓您在回應標頭政策中新增和設定 CORS 標頭。

此清單著重於如何在回應標頭政策中指定設定和有效值。如需進一步瞭解這些標頭以及如何實際將標頭用於 CORS 請求和回應，請參閱 MDN Web Docs 網站上的[跨原始來源資源分享](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)與 [CORS 通訊協定規格](https://fetch.spec.whatwg.org/#http-cors-protocol)。

**Access-Control-Allow-Credentials**  
這是布林值設定 (`true` 或 `false`)，用於決定 CloudFront 是否要對 CORS 請求的回應新增 `Access-Control-Allow-Credentials` 標頭。如這項設定為 `true`，CloudFront 就會對 CORS 請求的回應新增 `Access-Control-Allow-Credentials: true` 標頭，反之則不會將此標頭新增至回應。

**Access-Control-Allow-Headers**  
指定 CloudFront 用作 CORS 預檢請求回應中 `Access-Control-Allow-Headers` 標頭值的標頭名稱。此設定的有效值包括 HTTP 標頭名稱或萬用字元 (`*`)，用以表示所有標頭皆受允許。  
`Authorization` 標頭無法使用萬用字元，且必須明確列出。
    
**萬用字元的有效使用範例**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonCloudFront/latest/DeveloperGuide/understanding-response-headers-policies.html)

**Access-Control-Allow-Methods**  
指定 CloudFront 用作 CORS 預檢請求回應中 `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)`
如需使用萬用字元的範例，請參閱下表。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonCloudFront/latest/DeveloperGuide/understanding-response-headers-policies.html)

**Access-Control-Expose-Headers**  
指定 CloudFront 用作 CORS 請求回應中 `Access-Control-Expose-Headers` 標頭值的標頭名稱。此設定的有效值包括 HTTP 標頭名稱或萬用字元 (`*`)。

**Access-Control-Max-Age**  
CloudFront 用作 CORS 請求回應中 `Access-Control-Max-Age` 標頭值的秒數。

**覆寫原始伺服器**  
布林值設定，可決定當來自原始伺服器的回應包含其中一個也在政策中的 CORS 標頭時 CloudFront 的行為。  
+ 設定為 `true`，且原始伺服器回應包含列於政策中的 CORS 標頭時，CloudFront 會將政策中的 CORS 標頭新增至回應。然後 CloudFront 會將該回應傳送給檢視器。CloudFront 會忽略從原始伺服器收到的標頭。
+ 設定為 `false`，且原始伺服器回應包含 CORS 標頭時 (無論 CORS 標頭是否列於政策中)，CloudFront 會將從原始伺服器收到的 CORS 標頭包含在回應中。CloudFront 不會將政策中的任何 CORS 標頭新增至傳送給檢視器的回應。

## 安全性標頭
<a name="understanding-response-headers-policies-security"></a>

安全性標頭設定可讓您在回應標頭政策中新增及設定數個與安全性相關的 HTTP 回應標頭。

這份清單會說明如何在回應標頭政策中指定設定和有效值，如需進一步瞭解各個標頭以及如何實際將標頭用於 HTTP 回應，請參閱 MDN Web Docs 網站上的相關連結。

**Content-Security-Policy**  
指定 CloudFront 用作 `Content-Security-Policy` 回應標頭值的內容安全性政策指令。  
如需此標頭和有效政策指令的詳細資訊，請參閱 MDN Web 文件中的 [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy)。  
`Content-Security-Policy` 標頭值限制為 1783 個字元。

**推薦網站政策**  
指定 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 文件中的 [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy)。

**Strict-Transport-Security**  
指定 CloudFront 用作 `Strict-Transport-Security` 回應標頭值的指令和設定。對於此設定，您可以分別指定：  
+ CloudFront 用作此標頭的 `max-age` 指令值的秒數
+ `preload` 的布林值設定 (`true` 或 `false`)，用於決定 CloudFront 是否要在此標頭的值中納入 `preload` 指令
+ `includeSubDomains` 的布林值設定 (`true` 或 `false`)，用於決定 CloudFront 是否要在此標頭的值中納入 `includeSubDomains` 指令
如需此標頭和這些指令的詳細資訊，請參閱 MDN Web 文件中的 [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security)。

**X-Content-Type-Options**  
這是布林值設定 (`true` 或 `false`)，用於決定 CloudFront 是否要將 `X-Content-Type-Options` 標頭新增至回應。當此設定為 `true` 時，CloudFront 會將 `X-Content-Type-Options: nosniff` 標頭新增至回應。反之則不會新增此標頭。  
如需此標頭的詳細資訊，請參閱 MDN Web 文件中的 [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options)。

**X-Frame-Options**  
指定 CloudFront 用作 `X-Frame-Options` 回應標頭值的指令。此設定的有效值為 `DENY` 或 `SAMEORIGIN`。  
如需此標頭和這些指令的詳細資訊，請參閱 MDN Web 文件中的 [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options)。

**X-XSS-Protection**  
指定 CloudFront 用作 `X-XSS-Protection` 回應標頭值的指令和設定。對於此設定，您可以分別指定：  
+ `0` (禁用 XSS 篩選) 或 `1` (啟用 XSS 篩選) 的 `X-XSS-Protection` 設定
+ `block` 的布林值設定 (`true` 或 `false`)，用於決定 CloudFront 是否要在此標頭的值中納入 `mode=block` 指令
+ 報告 URI，用於決定 CloudFront 是否要在此標頭的值中納入 `report=reporting URI` 指令
您可以將 `block` 指定為 `true`，也可以指定報告 URI，但不能同時指定兩者。如需此標頭和這些指令的詳細資訊，請參閱 MDN Web 文件中的 [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection)。

**覆寫原始伺服器**  
每個這些安全性標頭設定均包含一個布林值設定 (`true` 或 `false`)，可決定當來自原始伺服器的回應包含此標頭時 CloudFront 的行為。  
當此設定為 `true`，且原始伺服器回應包含此標頭時，CloudFront 會將政策中的標頭新增至傳送給檢視者的回應，同時忽略從原始伺服器收到的標頭。  
當此設定為 `false`，且原始伺服器回應包含此標頭時，CloudFront 會在傳送給檢視者的回應中納入從原始伺服器收到的標頭。  
如原始伺服器回應不包含此標頭，CloudFront 會將政策中的標頭新增至傳送給檢視者的回應，無論此設定為 `true` 還是 `false` 都一樣。

## 自訂標頭
<a name="understanding-response-headers-policies-custom"></a>

自訂標頭設定可讓您在回應標頭政策中新增和設定自訂 HTTP 標頭，CloudFront 會將這些標頭新增至它傳回給檢視者的每個回應中。您可以為每個自訂標頭指定值，但不指定也沒關係，因為 CloudFront 可以新增沒有值的回應標頭。

每個自訂標頭也有自己的**原始伺服器覆寫**設定：
+ 當此設定為 `true`，且原始伺服器回應包含列於政策中的自訂標頭時，CloudFront 會將政策中的自訂標頭新增至傳送給檢視者的回應中，同時忽略從原始伺服器收到的標頭。
+ 當此設定為 `false`，且原始伺服器回應包含列於政策中的自訂標頭時，CloudFront 會在傳送給檢視者的回應中納入從原始伺服器收到的自訂標頭。
+ 如原始伺服器回應不包含列於政策中的自訂標頭，CloudFront 會將政策中的自訂標頭新增至傳送給檢視者的回應，無論此設定為 `true` 還是 `false` 都一樣。

## 移除標頭
<a name="understanding-response-headers-policies-remove-headers"></a>

您可以指定要讓 CloudFront 從原始伺服器接收到的回應中移除的標頭，如此一來，CloudFront 傳送給檢視者的回應就不會包含該標頭。CloudFront 會從傳送給檢視者的每個回應中移除標頭，無論物件是從 CloudFront 的快取或從原始伺服器提供。例如，您可以移除不使用瀏覽器的標頭 (例如 `X-Powered-By` 或 `Vary`)，以便讓 CloudFront 從傳送給檢視者的回應中移除這些標頭。

當您使用回應標頭政策指定要移除的標頭時，CloudFront 會先移除標頭，然後新增在回應標頭政策其他區段 (CORS 標頭、安全標頭、自訂標頭等) 中指定的任何標頭。若您指定了要移除的標頭，但同時在政策的另一個區段新增相同的標頭，CloudFront 會在傳送給檢視者的回應中包含該標頭。

**注意**  
您可以使用回應標頭政策移除 CloudFront 從原始伺服器接收的 `Server` 和 `Date` 標頭，如此一來，這些從原始伺服器接收的標頭就不會包含在 CloudFront 傳送給檢視者的回應中。不過，若採取此操作，CloudFront 會在傳送給檢視者的回應中新增自有的標頭版本。對於 CloudFront 新增的 `Server` 標頭，該標頭的值為 `CloudFront`。

### 您無法移除的標頭
<a name="remove-headers-disallowed"></a>

您無法使用回應標頭政策移除下列標頭。如果您在回應標頭政策 (API 中的 `ResponseHeadersPolicyRemoveHeadersConfig`) 的 **Remove headers** (移除標頭) 區段中指定這些標頭，就會收到錯誤訊息。
+ `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 標頭
<a name="server-timing-header"></a>

使用 `Server-Timing` 標頭設定啟用 CloudFront 所傳送的 HTTP 回應中的 `Server-Timing` 標頭。您可以使用這個標頭檢視有助於洞察 CloudFront 和原始伺服器行為和效能的指標。例如，您可以查看哪個快取層出現了快取命中，或是在發生快取遺漏時，查看來自原始伺服器的第一個位元組延遲時間。`Server-Timing` 標頭中的指標可以幫助您排解問題，或者測試 CloudFront 或原始伺服器組態的效率。

如需進一步瞭解透過 CloudFront 使用 `Server-Timing` 標頭，請參閱下列主題。

如要啟用 `Server-Timing` 標頭，請[建立 (或編輯) 回應標頭政策](creating-response-headers-policies.md)。

**Topics**
+ [取樣率和 Pragma 請求標頭](#server-timing-header-sampling-rate)
+ [來自原始伺服器的 Server-Timing 標頭](#server-timing-header-origin)
+ [Server-Timing 標頭指標](#server-timing-header-metrics)
+ [Server-Timing 標頭範例](#server-timing-header-examples)

### 取樣率和 Pragma 請求標頭
<a name="server-timing-header-sampling-rate"></a>

您在回應標頭政策中啟用 `Server-Timing` 標頭後，還可以指定*抽樣率*。抽樣率是介於 0 至 100 之間 (包含 0 與 100) 的數值，用於指定 CloudFront 要新增 `Server-Timing` 標頭的回應數百分比。如將抽樣率設為 100，則任何 HTTP 回應只要符合回應標頭政策所連接的快取行為，CloudFront 一律會新增 `Server-Timing` 標頭；如將抽樣率設為 50，則 CloudFront 會對符合快取行為的請求中 50% 的回應新增此標頭。您可以將抽樣率設定為 0 至 100 之間的任何數值，最多可精確到小數點後四位數字。

當抽樣率設定為低於 100 的數值時，您無法控管 CloudFront 會對哪些回應新增 `Server-Timing` 標頭，只能掌握有多少百分比的回應會加上標頭。不過，假如您為 HTTP 請求新增 `Pragma` 標頭，並將值設定為 `server-timing`，那麼該請求的回應便會一定收到 `Server-Timing` 標頭，無論抽樣率設為多少都一樣；即使抽樣率設為零 (0)，只要是包含 `Pragma: server-timing` 標頭的請求，CloudFront 一律會對其回應加上 `Server-Timing` 標頭。

### 來自原始伺服器的 Server-Timing 標頭
<a name="server-timing-header-origin"></a>

發生快取遺漏且 CloudFront 轉送請求到原始伺服器時，原始伺服器可能包含 `Server-Timing` 標頭在其對 CloudFront 的回應中。在這種情況下，CloudFront 會新增其[指標](#server-timing-header-metrics)到從原始伺服器收到的 `Server-Timing` 標頭。CloudFront 傳送給檢視器的回應包含單一回應 `Server-Timing` 標頭，其中包含來自原始伺服器的值以及 CloudFront 新增的指標。來自原始伺服器的標頭值可能位於結尾，或介於 CloudFront 新增至標頭的兩組指標之間。

發生快取命中時，CloudFront 傳送給檢視器的回應會包含單一 `Server-Timing` 標頭，其標頭值中僅包含 CloudFront 指標 (不包含來自原始伺服器的值)。

### Server-Timing 標頭指標
<a name="server-timing-header-metrics"></a>

如 CloudFront 對 HTTP 回應新增了 `Server-Timing` 標頭，標頭的值會包含一或多項指標，可協助您獲得 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)

**cdn-hit-layer**  
當 CloudFront 在沒有向原始伺服器提出請求的情況下提供了來自快取的回應，就會出現這個指標。包含以下其中一個值：  
+ **EDGE** – CloudFront 提供了來自 POP 位置的快取回應。
+ **REC** – CloudFront 提供了來自[區域節點快取](HowCloudFrontWorks.md#CloudFrontRegionaledgecaches) (REC) 位置的快取回應。
+ **Origin Shield** – CloudFront 提供了做為 [Origin Shield](origin-shield.md) 的 REC 傳送的快取回應。

**cdn-upstream-layer**  
如 CloudFront 向原始伺服器請求了完整物件，就會出現這個指標；指標會包含下列其中一個值：  
+ **EDGE** – POP 位置將請求直接傳送給了原始伺服器。
+ **REC** – REC 位置將請求直接傳送給了原始伺服器。
+ **Origin Shield** – 做為 [Origin Shield](origin-shield.md) 的 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 標頭範例
<a name="server-timing-header-examples"></a>

下列範例顯示 `Server-Timing` 標頭設定啟用後，檢視者可能從 CloudFront 收到的 `Server-Timing` 標頭。

**Example – 快取遺漏**  
下列範例顯示當 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 使用了原始伺服器的快取 DNS 結果 (`cdn-upstream-dns;dur=0`)。
+ CloudFront 花了 114 毫秒才完成與原始伺服器的 TCP (及 TLS，如有) 連線 (`cdn-upstream-connect;dur=114`)。
+ 完成請求後，CloudFront 花了 177 毫秒才從原始伺服器收到回應的第一個位元組 (`cdn-upstream-fbl;dur=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`)。

**Example – 快取命中**  
下列範例顯示當 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`)。

# 建立回應標頭政策
<a name="creating-response-headers-policies"></a>

您可以使用回應標頭政策來指定 Amazon CloudFront 移除或新增至 HTTP 回應的 HTTP 標頭。如需回應標頭政策及其使用原因的詳細資訊，請參閱[在 CloudFront 回應中使用政策新增或移除 HTTP 標頭](modifying-response-headers.md)。

您可以在 CloudFront 主控台中建立回應標頭政策，或者，您可以使用 AWS CloudFormation、 AWS Command Line Interface (AWS CLI) 或 CloudFront API 建立一個。建立回應標頭政策之後，您可以將它連接到 CloudFront 分佈中的一或多個快取行為。

建立自訂回應標頭政策之前，請先確認是否有任何[受管回應標頭政策](using-managed-response-headers-policies.md)適合您的使用案例；如果有，您就可以將該政策連接到您的快取行為，而不需自行建立或管理回應標頭政策。

------
#### [ Console ]

**建立回應標頭政策 (主控台)**

1. 登入 AWS 管理主控台，然後前往 CloudFront 主控台**的政策**頁面上的**回應標頭**索引標籤[https://console.aws.amazon.com/cloudfront/v4/home#/policies/responseHeaders](https://console.aws.amazon.com/cloudfront/v4/home#/policies/responseHeaders)。

1. 選擇 **Create response headers policy (建立回應標頭政策)**。

1. 在 **Create response headers policy (建立回應標頭政策)** 表單中執行下列動作：

   1. 在 **Details (詳細資訊)** 面板中，輸入回應標頭政策的 **Name (名稱)** 和 (選用) 解釋政策用途的 **Description (描述)**。

   1. 在 **Cross-origin resource sharing (CORS) (跨來源資源分享 (CORS))** 面板中，選擇 **Configure CORS (設定 CORS)** 切換開關，並設定您要新增至政策的任何 CORS 標頭。如果您希望設定的標頭覆寫 CloudFront 從原始伺服器接收的標頭，請選取 **Origin override (原始伺服器覆寫)** 核取方塊。

      如需 CORS 標頭設定的詳細資訊，請參閱 [CORS 標頭](understanding-response-headers-policies.md#understanding-response-headers-policies-cors)。

   1. 在 **Security headers (安全性標頭)** 面板中，選擇切換開關並設定您要新增至政策的每個安全性標頭。

      如需安全性標頭設定的詳細資訊，請參閱 [安全性標頭](understanding-response-headers-policies.md#understanding-response-headers-policies-security)。

   1. 在 **Custom headers (自訂標頭)** 面板中，新增您想要納入政策的任何自訂標頭。

      如需自訂標頭設定的詳細資訊，請參閱 [自訂標頭](understanding-response-headers-policies.md#understanding-response-headers-policies-custom)。

   1. 在 **Remove headers** (移除標頭) 面板中，新增您希望 CloudFront 從原始伺服器回應移除，而不包含於 CloudFront 傳送給檢視者的回應中的任何標頭名稱。

      如需移除標頭設定的詳細資訊，請參閱 [移除標頭](understanding-response-headers-policies.md#understanding-response-headers-policies-remove-headers)。

   1. 在 **Server-Timing header** (Server-Timing 標頭) 面板中，選擇 **Enable** (啟用) 切換，然後輸入採樣率 (須為介於 0 到 100 之間的數值，包括 0 與 100)。

      如需有關 `Server-Timing` 標頭的詳細資訊，請參閱[Server-Timing 標頭](understanding-response-headers-policies.md#server-timing-header)。

1. 選擇 **Create (建立)** 以建立政策。

建立回應標頭政策之後，您可以將它連接到 CloudFront 分佈中的快取行為。

**若要將回應標頭政策連接至現有分佈 (主控台)**

1. 在位於 [https://console.aws.amazon.com/cloudfront/v4/home#/distributions](https://console.aws.amazon.com/cloudfront/v4/home#/distributions) 的 CloudFront 主控台中開啟 **Distributions** (分佈) 頁面。

1. 選擇要更新的分佈，然後選擇 **Behaviors (行為)** 索引標籤。

1. 選擇要更新的快取行為，然後選擇 **Edit (編輯)**。

   或者，若要建立新的快取行為，請選擇 **Create behavior (建立行為)**。

1. 對於 **Response headers policy (回應標頭政策)**，選擇要新增至快取行為的政策。

1. 選擇 **Save changes (儲存變更)** 以更新快取行為。如果要建立新的快取行為，請選擇 **Create behavior** (建立行為)。

**若要將回應標頭政策連接至新分佈 (主控台)**

1. 在 [https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) 中開啟 CloudFront 主控台。

1. 選擇 **Create Distribution (建立分佈)**。

1. 對於 **Response headers policy (回應標頭政策)**，選擇要新增至快取行為的政策。

1. 為您的分佈選擇其他設定。如需詳細資訊，請參閱[所有分佈設定參考](distribution-web-values-specify.md)。

1. 選擇 **Create distribution (建立分佈)** 以建立分佈。

------
#### [ CloudFormation ]

若要使用 建立回應標頭政策 CloudFormation，請使用 `AWS::CloudFront::ResponseHeadersPolicy` 資源類型。下列範例以 YAML 格式顯示 CloudFormation 範本語法，用於建立回應標頭政策。

```
Type: AWS::CloudFront::ResponseHeadersPolicy
Properties: 
  ResponseHeadersPolicyConfig: 
    Name: EXAMPLE-Response-Headers-Policy
    Comment: Example response headers policy for the documentation
    CorsConfig: 
      AccessControlAllowCredentials: false
      AccessControlAllowHeaders: 
        Items: 
          - '*'
      AccessControlAllowMethods: 
        Items: 
          - GET
          - OPTIONS
      AccessControlAllowOrigins: 
        Items: 
          - https://example.com
          - https://docs.example.com
      AccessControlExposeHeaders: 
        Items: 
          - '*'
      AccessControlMaxAgeSec: 600
      OriginOverride: false
    CustomHeadersConfig: 
      Items: 
        - Header: Example-Custom-Header-1
          Value: value-1
          Override: true
        - Header: Example-Custom-Header-2
          Value: value-2
          Override: true
    SecurityHeadersConfig: 
      ContentSecurityPolicy: 
        ContentSecurityPolicy: default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'; frame-ancestors 'none'
        Override: false
      ContentTypeOptions: # You don't need to specify a value for 'X-Content-Type-Options'.
                          # Simply including it in the template sets its value to 'nosniff'.
        Override: false
      FrameOptions: 
        FrameOption: DENY
        Override: false
      ReferrerPolicy: 
        ReferrerPolicy: same-origin
        Override: false
      StrictTransportSecurity: 
        AccessControlMaxAgeSec: 63072000
        IncludeSubdomains: true
        Preload: true
        Override: false
      XSSProtection: 
        ModeBlock: true # You can set ModeBlock to 'true' OR set a value for ReportUri, but not both
        Protection: true
        Override: false
    ServerTimingHeadersConfig:
      Enabled: true
      SamplingRate: 50
    RemoveHeadersConfig:
      Items:
        - Header: Vary
        - Header: X-Powered-By
```

如需詳細資訊，請參閱 *AWS CloudFormation 使用者指南*中的 [AWS::CloudFront::ResponseHeadersPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-responseheaderspolicy.html)。

------
#### [ CLI ]

若要使用 AWS Command Line Interface (AWS CLI) 建立回應標頭政策，請使用 **aws cloudfront create-response-headers-policy**命令。您可以使用輸入檔案來提供命令的輸入參數，而不必分別將每個個別參數指定為命令列輸入。

**建立回應標頭政策 (包含輸入檔案的 CLI)**

1. 使用下列命令建立名為 `response-headers-policy.yaml` 的檔案。這個檔案中包含 **create-response-headers-policy** 命令的所有輸入參數。

   ```
   aws cloudfront create-response-headers-policy --generate-cli-skeleton yaml-input > response-headers-policy.yaml
   ```

1. 開啟您剛才建立的 `response-headers-policy.yaml` 檔案。編輯檔案以指定政策名稱和所需的回應標頭政策組態，然後儲存檔案。

   如需有關回應標頭政策設定的詳細資訊，請參閱 [了解回應標頭政策](understanding-response-headers-policies.md)。

1. 使用下列命令建立回應標頭政策。您所建立的政策會使用 `response-headers-policy.yaml` 檔案中的輸入參數。

   ```
   aws cloudfront create-response-headers-policy --cli-input-yaml file://response-headers-policy.yaml
   ```

   記下命令輸出中的 `Id` 值，這是回應標頭政策的 ID，將此政策連接到 CloudFront 分佈的快取行為時需要使用這個值。

**將回應標頭政策連接至現有分佈 (包含輸入檔案的 CLI)**

1. 使用下列命令來儲存您想要更新之 CloudFront 分佈的分佈組態。將 *distribution\$1ID* 改為分佈的 ID。

   ```
   aws cloudfront get-distribution-config --id distribution_ID --output yaml > dist-config.yaml
   ```

1. 開啟您剛才建立且命名為 `dist-config.yaml` 的檔案。編輯檔案，對快取行為進行下列變更，以便讓該行為使用此回應標頭政策。
   + 在快取行為中新增名為 `ResponseHeadersPolicyId` 的欄位。對於欄位值，請使用您在建立政策後記下的回應標頭政策 ID。
   + 將 `ETag` 欄位重新命名為 `IfMatch`，但不要變更欄位的值。

   完成後儲存檔案。

1. 使用下列命令來更新分佈以使用回應標頭政策。將 *distribution\$1ID* 改為分佈的 ID。

   ```
   aws cloudfront update-distribution --id distribution_ID --cli-input-yaml file://dist-config.yaml
   ```

**若要將回應標頭政策連接至新分佈 (包含輸入檔案的 CLI)**

1. 使用下列命令建立名為 `distribution.yaml` 的檔案。這個檔案中包含 **create-distribution** 命令的所有輸入參數。

   ```
   aws cloudfront create-distribution --generate-cli-skeleton yaml-input > distribution.yaml
   ```

1. 開啟您剛才建立的 `distribution.yaml` 檔案。在預設快取行為的 `ResponseHeadersPolicyId` 欄位中，輸入您在建立政策後記下的回應標頭政策 ID。繼續編輯檔案以指定所需的分佈設定，然後在完成後儲存檔案。

   如需有關分佈設定的詳細資訊，請參閱 [所有分佈設定參考](distribution-web-values-specify.md)。

1. 使用下列命令，使用 `distribution.yaml` 檔案中的輸入參數建立分佈。

   ```
   aws cloudfront create-distribution --cli-input-yaml file://distribution.yaml
   ```

------
#### [ API ]

若要使用 CloudFront API 建立回應標頭政策，請使用 [CreateResponseHeadersPolicy](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateResponseHeadersPolicy.html)。如需您在此 API 呼叫中指定欄位的詳細資訊，請參閱 [了解回應標頭政策](understanding-response-headers-policies.md)和 AWS SDK 或其他 API 用戶端的 API 參考文件。

建立回應標頭政策之後，您可以使用下列其中一個 API 呼叫，將其連接至快取行為：
+ 若要將它附加到現有分佈中的快取行為，請使用 [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html)。
+ 若要將它附加到新分佈中的快取行為，請使用 [CreateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistribution.html)。

對於這兩個 API 呼叫，請在快取行為中的 `ResponseHeadersPolicyId` 欄位中提供回應標頭政策的 ID。如需您在這些 API 呼叫中指定之其他欄位的詳細資訊，請參閱 [所有分佈設定參考](distribution-web-values-specify.md)和 AWS SDK 或其他 API 用戶端的 API 參考文件。

------

# 使用受管回應標頭政策
<a name="using-managed-response-headers-policies"></a>

藉助 CloudFront 回應標頭政策，您可以指定 Amazon CloudFront 移除或新增至傳送給檢視者之回應的 HTTP 標頭。如需回應標頭政策及其使用原因的詳細資訊，請參閱[在 CloudFront 回應中使用政策新增或移除 HTTP 標頭](modifying-response-headers.md)。

CloudFront 提供受管回應標頭政策，您可以將這些政策連接至 CloudFront 發佈中的快取行為。使用受管回應標頭政策，您不需要撰寫或維護自己的政策。受管政策包含適用於常見使用案例的 HTTP 回應標頭集。

若要使用受管回應標頭政策，請將其連接至分佈中的快取行為。這項程序與建立自訂回應標頭政策的程序相同，只不過您並不會建立新政策，而是連接其中一項受管政策。您可以依名稱 （使用主控台） 或 ID CloudFormation（使用 AWS CLI、 或 AWS SDKs) 連接政策。名稱和 ID 會列在下一節中。

如需詳細資訊，請參閱[建立回應標頭政策](creating-response-headers-policies.md)。

下列主題說明您可以使用的受管回應標頭政策。

**Topics**
+ [CORS-and-SecurityHeadersPolicy](#managed-response-headers-policies-cors-security)
+ [CORS-With-Preflight](#managed-response-headers-policies-cors-preflight)
+ [CORS-with-preflight-and-SecurityHeadersPolicy](#managed-response-headers-policies-cors-preflight-security)
+ [SecurityHeadersPolicy](#managed-response-headers-policies-security)
+ [SimpleCORS](#managed-response-headers-policies-cors)

## CORS-and-SecurityHeadersPolicy
<a name="managed-response-headers-policies-cors-security"></a>

[在 CloudFront 主控台中檢視此政策](https://console.aws.amazon.com/cloudfront/v4/home#/policies/responseHeaders/e61eb60c-9c35-4d20-a928-2b84e02af89c)

使用此受管政策允許來自任何原始伺服器的簡單 CORS 請求。此政策也會將一組安全性標頭新增至 CloudFront 傳送給檢視者的所有回應。這項政策將 [SimpleCORS](#managed-response-headers-policies-cors) 和 [SecurityHeadersPolicy](#managed-response-headers-policies-security) 政策結合為一個政策。

使用 CloudFormation AWS CLI、 或 CloudFront API 時，此政策的 ID 為：

`e61eb60c-9c35-4d20-a928-2b84e02af89c`


**政策設定**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonCloudFront/latest/DeveloperGuide/using-managed-response-headers-policies.html)

## CORS-With-Preflight
<a name="managed-response-headers-policies-cors-preflight"></a>

[在 CloudFront 主控台中檢視此政策](https://console.aws.amazon.com/cloudfront/v4/home#/policies/responseHeaders/5cc3b908-e619-4b99-88e5-2cf7f45965bd)

使用此受管政策可允許來自任何原始伺服器的 CORS 請求，包括預檢請求。對於預檢請求（使用 HTTP `OPTIONS` 方法），CloudFront 將以下三個標頭新增至回應中。對於簡單 CORS 請求，CloudFront 只新增 `Access-Control-Allow-Origin` 標頭。

如果 CloudFront 從原始伺服器收到的回應包含任何這些標頭，CloudFront 會在傳送給檢視者的回應中使用接收到的標頭 (及其值)，而不是此政策中的標頭。

使用 CloudFormation AWS CLI、 或 CloudFront API 時，此政策的 ID 為：

`5cc3b908-e619-4b99-88e5-2cf7f45965bd`


**政策設定**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonCloudFront/latest/DeveloperGuide/using-managed-response-headers-policies.html)

## CORS-with-preflight-and-SecurityHeadersPolicy
<a name="managed-response-headers-policies-cors-preflight-security"></a>

[在 CloudFront 主控台中檢視此政策](https://console.aws.amazon.com/cloudfront/v4/home#/policies/responseHeaders/eaab4381-ed33-4a86-88ca-d9558dc6cd63)

使用此受管政策可允許來自任何原始伺服器的 CORS 請求，包含預檢請求。此政策也會將一組安全性標頭新增至 CloudFront 傳送給檢視者的所有回應。這項政策將 [CORS-With-Preflight](#managed-response-headers-policies-cors-preflight) 和 [SecurityHeadersPolicy](#managed-response-headers-policies-security) 政策結合為一個政策。

使用 CloudFormation AWS CLI、 或 CloudFront API 時，此政策的 ID 為：

`eaab4381-ed33-4a86-88ca-d9558dc6cd63`


**政策設定**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonCloudFront/latest/DeveloperGuide/using-managed-response-headers-policies.html)

## SecurityHeadersPolicy
<a name="managed-response-headers-policies-security"></a>

[在 CloudFront 主控台中檢視此政策](https://console.aws.amazon.com/cloudfront/v4/home#/policies/responseHeaders/67f7725c-6f97-4210-82d7-5512b31e9d03)

使用此受管政策，將一組安全性標頭新增至 CloudFront 傳送給檢視者的所有回應。如需這些安全性標頭的詳細資訊，請參閱 [Mozilla 的 Web 安全指南](https://infosec.mozilla.org/guidelines/web_security)。

使用這項回應標頭政策後，CloudFront 會為所有回應新增 `X-Content-Type-Options: nosniff`，無論 CloudFront 從原始伺服器收到的回應是否包含這個標頭都一樣。但如果 CloudFront 從原始伺服器收到的回應所包含的是此政策中的其他任何標頭，則 CloudFront 會在傳送給檢視者的回應中使用接收到的標頭 (及其值)，而不是此政策中的標頭。

使用 CloudFormation AWS CLI、 或 CloudFront API 時，此政策的 ID 為：

`67f7725c-6f97-4210-82d7-5512b31e9d03`


**政策設定**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonCloudFront/latest/DeveloperGuide/using-managed-response-headers-policies.html)

## SimpleCORS
<a name="managed-response-headers-policies-cors"></a>

[在 CloudFront 主控台中檢視此政策](https://console.aws.amazon.com/cloudfront/v4/home#/policies/responseHeaders/60669652-455b-4ae9-85a4-c4c02393f86c)

使用此受管政策允許來自任何原始伺服器的[簡單 CORS 請求](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests)。使用此政策，CloudFront 將標頭 `Access-Control-Allow-Origin: *` 新增至簡單 CORS 請求的所有回應。

如果 CloudFront 從原始伺服器收到的回應包含 `Access-Control-Allow-Origin` 標頭，CloudFront 會在傳送給檢視者的回應中使用該標頭 (及其值)，而不是此政策中的標頭。

使用 CloudFormation AWS CLI、 或 CloudFront API 時，此政策的 ID 為：

`60669652-455b-4ae9-85a4-c4c02393f86c`


**政策設定**  

|  | 標頭名稱 | 標頭值 | 是否覆寫原始伺服器？ | 
| --- | --- | --- | --- | 
| CORS 標頭： | Access-Control-Allow-Origin | \$1 | 否 | 