

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

# 使用 gRPC 搭配 CloudFront 分佈
<a name="distribution-using-grpc"></a>

Amazon CloudFront 支援 gRPC，這是一種以 HTTP/2 為基礎建置的開放原始碼遠端程序呼叫 (RPC) 架構。gRPC 提供雙向串流和二進位通訊協定緩衝承載，因此非常適合需要低延遲通訊的應用程式。

CloudFront 會接收您的 gRPC 請求，並將其直接代理到您的原始伺服器。您可以使用 CloudFront 來代理四種類型的 gRPC 服務：
+ 一元 RPC
+ 伺服器串流 RPC
+ 用戶端串流 RPC
+ 雙向串流 RPC

## gRPC 如何在 CloudFront 中運作
<a name="how-grpc-works-cloudfront"></a>

若要在 CloudFront 中設定 gRPC，請將提供 gRPC 服務的原始伺服器設定為分佈的原始伺服器。您可以使用同時提供非 gRPC 和 gRPC 服務的原始伺服器。CloudFront 會根據 `Content-Type` 標頭判斷傳入請求是 gRPC 請求還是 HTTP/HTTPS 請求。如果請求的 `Content-Type` 標頭值為 `application/grpc`，則該請求會被視為 gRPC 請求，且 CloudFront 會將請求代理到您的原始伺服器。

**注意**  
如要啟用發佈以處理 gRPC 請求，請將 HTTP/2 納入為支援的 HTTP 版本之一，並允許 HTTP 方法 (包括 `POST`)。您的 gRPC 原始伺服器端點必須設定為支援 HTTPS，因為 CloudFront 端僅支援安全 (以 HTTP 為基礎的) gRPC 連線。gRPC 僅支援端對端 HTTPS。如果您使用的是自訂原始伺服器，請確認您的[通訊協定](DownloadDistValuesOrigin.md#DownloadDistValuesOriginProtocolPolicy)設定支援 HTTPS。

若要為您的分佈啟用 gRPC 支援，請完成下列步驟：

1. 更新分佈的快取行為以允許 HTTP 方法，包括 `POST` 方法。

1. 在您選取 `POST` 方法後，選取出現的 gRPC 核取方塊。

1. 將 **HTTP/2** 指定為其中一個支援的 HTTP 版本。

如需詳細資訊，請參閱下列主題：
+ [允許透過 HTTP/2 進行 gRPC 請求](DownloadDistValuesCacheBehavior.md#enable-grpc-distribution)
+ 《*Amazon CloudFront API 參考*》中的 [GrpcConfig](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_GrpcConfig.html)

由於 gRPC 僅適用於不可快取的 API 流量，因此您的快取設定不會影響 gRPC 請求。您可以使用原始伺服器請求政策將自訂標頭新增至傳送至 gRPC 原始伺服器的 gRPC 請求。您可以搭配 CloudFront 使用 AWS WAF 來管理對 gRPC 分佈的存取、控制機器人，以及保護您的 gRPC 應用程式免受網路入侵攻擊。CloudFront gRPC 支援 [CloudFront Functions](cloudfront-functions.md)。

除了 HTTPS 狀態之外，您還會收到 gRPC 回應的 grpc-status。如需 grpc-status 的可能值清單，請參閱[狀態碼及其在 gRPC 中的使用狀況](https://grpc.github.io/grpc/core/md_doc_statuscodes.html)。

**備註**  
gRPC 不支援以下 CloudFront 功能：  
[自訂錯誤回應](GeneratingCustomErrorResponses.md)
 gRPC 不支援[原始伺服器容錯移轉](high_availability_origin_failover.md)，因為 gRPC 使用 `POST` 方法。只有當檢視器請求的 HTTP 方法為 `GET`、`HEAD` 或 `OPTIONS` 時，CloudFront 才會容錯移轉至次要原始伺服器。
CloudFront 會將 gRPC 請求直接傳送至原始伺服器，並略過區域邊緣快取 (REC)。由於 gRPC 會略過 REC，所以 gRPC 不支援 [Lambda@Edge](lambda-at-the-edge.md) 或 [Origin Shield](origin-shield.md)。
gRPC 不支援 AWS WAF 請求內文檢查規則。如果您在 Web ACL 上為分佈啟用這些規則，任何使用 gRPC 的請求都會忽略請求本文檢查規則。所有其他 AWS WAF 規則仍將適用。如需詳細資訊，請參閱[為分佈啟用 AWS WAF](WAF-one-click.md)。