

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

# 增加從 CloudFront 快取直接提供的請求比例 (快取命中率)
<a name="cache-hit-ratio"></a>

你可以藉由增加從 CloudFront 快取直接提供的瀏覽者請求比例 (而不是轉送到原始伺服器以取得內容) 的方式提升效能。這就是所謂的改善快取命中率。

下列各節說明如何提高您的快取命中率。

**Topics**
+ [指定 CloudFront 快取物件的時間長短](#cache-hit-ratio-duration)
+ [使用 Origin Shield](#cache-hit-ratio-use-origin-shield)
+ [根據查詢字串參數快取](#cache-hit-ratio-query-string-parameters)
+ [根據 Cookie 值快取](#cache-hit-ratio-cookies)
+ [根據請求標頭快取](#cache-hit-ratio-request-headers)
+ [不需要壓縮時，移除 `Accept-Encoding` 標頭](#cache-hit-ratio-remove-accept-encoding)
+ [透過 HTTP 提供媒體內容](#cache-hit-ratio-http-streaming)

## 指定 CloudFront 快取物件的時間長短
<a name="cache-hit-ratio-duration"></a>

若要提高快取命中率，您可以設定原始伺服器，將 [Cache-Control max-age](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control) 指令新增至物件，並為 `max-age` 指定最長的實際值。快取持續時間越短，CloudFront 將請求傳送到原始伺服器的頻率越高，該請求旨在確定物件是否更改並獲取最新版本。您可以以 `stale-while-revalidate` 和 `stale-if-error` 指令補充 `max-age`，以在特定情況下進一步改善快取命中率。如需詳細資訊，請參閱[管理內容保持在快取中達多久時間 (過期)](Expiration.md)。

## 使用 Origin Shield
<a name="cache-hit-ratio-use-origin-shield"></a>

CloudFront Origin Shield 可協助提高您 CloudFront 分佈的快取命中率，因為它會在您的原始伺服器前面提供額外的一層快取。當您使用 Origin Shield 時，從所有 CloudFront 快取層向原始伺服器提出的所有請求都來自單一位置。CloudFront 可以使用來自 Origin Shield 的單一原始伺服器請求擷取每個物件，而 CloudFront 快取的所有其他層 (節點和[區域節點快取](HowCloudFrontWorks.md#CloudFrontRegionaledgecaches)) 都可以從 Origin Shield 擷取物件。

如需更多詳細資訊，請參閱 [使用 Amazon CloudFront Origin Shield](origin-shield.md)。

## 根據查詢字串參數快取
<a name="cache-hit-ratio-query-string-parameters"></a>

如果設定 CloudFront 來根據查詢字串參數快取，如果您執行下列操作便可以提升快取：
+ 設定 CloudFront 僅轉送查詢字串參數，原始伺服器將回傳唯一物件給該參數。
+ 對所有相同參數的執行個體使用相同的大小寫 (大寫或小寫)。例如，如果一個請求包含 `parameter1=A` 和另一個包含 `parameter1=a`，則 CloudFront 轉送個別的請求到原始伺服器，當請求包含 `parameter1=A` 以及當請求包含 `parameter1=a` 時。然後，CloudFront 分別快取由原始伺服器回傳的對應物件，即使物件相同。如果只是使用 `A` 或者 `a`，則 CloudFront 轉送較少的請求到原始伺服器。
+ 以相同順序列出參數。就像案例中的差異，如果一個包含查詢字串的物件請求 `parameter1=a&parameter2=b` 和其他包含 `parameter2=b&parameter1=a` 的相同物件請求，則 CloudFront 同時轉送請求到原始伺服器，並分別快取對應的物件，即使他們是相同的。如果您一律使用相同的參數順序，則 CloudFront 轉送較少的請求到您的原始伺服器。

如需更多詳細資訊，請參閱 [根據查詢字串參數快取內容](QueryStringParameters.md)。如果您要檢視 CloudFront 轉送至原始伺服器的查詢字串，請參閱 CloudFront 日誌檔案的 `cs-uri-query` 欄中的值。如需更多詳細資訊，請參閱 [存取日誌 （標準日誌）](AccessLogs.md)。

## 根據 Cookie 值快取
<a name="cache-hit-ratio-cookies"></a>

如果設定 CloudFront 來根據 Cookie 值快取，如果您執行下列操作便可以提升快取：
+ 設定 CloudFront 只轉送指定的 Cookie，而不是轉送所有 Cookie。對於您設定 CloudFront 轉送到原始伺服器的 Cookie，CloudFront 會轉送 Cookie 名稱和值的每個組合。然後它分別快取原始伺服器傳回的物件，即使它們都是相同的。

  例如，假設每個檢視器請求包含兩個 Cookie，每個 Cookie 有三種可能的值，且所有 Cookie 值的組合都有可能。CloudFront 轉送最多九個不同的請求到每一個物件的原始伺服器。如果原始伺服器僅根據其中一個 Cookie 傳回物件的不同版本，則 CloudFront 會轉送多過於需求的請求到原始伺服器，且不必要快取多個相同的物件版本。
+ 為靜態和動態內容建立個別的快取行為，並設定 CloudFront 只需為動態內容轉送 Cookie 到原始伺服器。

  例如，假設您的分佈只有一個快取行為，且您正使用這個適用於動態內容的分佈，例如 `.js` 檔案，以及很少變更的 `.css` 檔案。CloudFront 根據 Cookie 值快取個別 `.css` 檔案的版本，因此 CloudFront 節點為每個新的 Cookie 值或 Cookie 值的組合轉送請求到原始伺服器。

  如果您建立快取行為的路徑模式是 `*.css` 以及 CloudFront 不根據 Cookie 值快取，則 CloudFront 會轉送 `.css` 檔案的請求到原始伺服器時，僅針對節點收到指定 `.css` 檔案的第一個請求以及在 `.css` 檔案過期後的第一個請求。
+ 可能的話，每個使用者的 Cookie 值是唯一的 (例如使用者 ID) 時，為動態內容建立個別的快取行為，且動態內容根據較少數量的唯一值而有所不同。

如需更多詳細資訊，請參閱 [根據 Cookie 快取內容](Cookies.md)。如果您要檢視 CloudFront 轉送至原始伺服器的 Cookie，請參閱 CloudFront 日誌檔案的 `cs(Cookie)` 欄中的值。如需更多詳細資訊，請參閱 [存取日誌 （標準日誌）](AccessLogs.md)。

## 根據請求標頭快取
<a name="cache-hit-ratio-request-headers"></a>

如果設定 CloudFront 來根據請求標頭快取，如果您執行下列操作便可以提升快取：
+ 設定 CloudFront 根據指定的標頭轉送和快取，而不是根據所有標頭轉送和快取。對於您指定的標頭，CloudFront 會轉送標頭名稱和值的每個組合。然後它分別快取原始伺服器傳回的物件，即使它們都是相同的。
**注意**  
CloudFront 一律轉送到原始伺服器，在下列主題指定的標頭：  
CloudFront 如何處理和轉送請求至您的 Amazon S3 原始伺服器 > [CloudFront 移除或更新的 HTTP 請求標頭](RequestAndResponseBehaviorS3Origin.md#request-s3-removed-headers)
CloudFront 如何處理和轉送請求至您的自訂原始伺服器 > [HTTP 請求標頭和 CloudFront 行為 (自訂和 Amazon S3 原始伺服器)](RequestAndResponseBehaviorCustomOrigin.md#request-custom-headers-behavior)

  當您設定 CloudFront 根據請求標頭快取時，不要變更 CloudFront 轉送的標頭，只有 CloudFront 是否根據標頭值來快取物件。
+ 請嘗試避免根據有大量唯一值的請求標頭來快取。

  例如，如果您想要根據使用者裝置提供不同大小的影像，則不要設定 CloudFront 根據有大量可能值的 `User-Agent` 標頭來快取。反之，設定 CloudFront 根據 CloudFront 裝置型標頭 `CloudFront-Is-Desktop-Viewer`、`CloudFront-Is-Mobile-Viewer`、`CloudFront-Is-SmartTV-Viewer` 及 `CloudFront-Is-Tablet-Viewer` 來進行快取。此外，如果您是傳回適用於平板電腦和桌面的影像相同版本，則僅轉送 `CloudFront-Is-Tablet-Viewer` 標頭，而非 `CloudFront-Is-Desktop-Viewer` 標頭。

如需詳細資訊，請參閱[根據請求標頭快取內容](header-caching.md)。

## 不需要壓縮時，移除 `Accept-Encoding` 標頭
<a name="cache-hit-ratio-remove-accept-encoding"></a>

如果因為原始伺服器不支援、CloudFront 不支援或內容無法壓縮而未啟用壓縮，您可以將分佈中的快取行為與設定 Custom Origin Header 如下的原始檔關聯，以增加快取命中率：
+ **Header name (標頭名稱**)：`Accept-Encoding`
+ **Header value (標頭值)**：(保留空白)

當您使用此組態時，CloudFront 會從快取金鑰移除 `Accept-Encoding` 標頭，並且不會在原始伺服器請求中包含標頭。此組態會套用到 CloudFront 提供的所有內容以及來自該原始伺服器的分佈。

## 透過 HTTP 提供媒體內容
<a name="cache-hit-ratio-http-streaming"></a>

如需如何最佳化隨需視訊 (VOD) 及串流視訊內容的相關資訊，請參閱 [使用 CloudFront 提供隨需視訊和即時串流視訊](on-demand-streaming-video.md)。