

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

# 使用 WebSockets 搭配 CloudFront 分佈
<a name="distribution-working-with.websockets"></a>

Amazon CloudFront 支援使用 WebSocket，這是一種 TCP 型通訊協定，當您在用戶端與伺服器之間需要長時間的雙向連線時，此通訊協定很有用。持久性連線通常是即時應用程式的一項要求。您可能在其中使用 WebSockets 的案例包括社交聊天平台、線上協作工作區、多玩家遊戲，以及可提供即時資料饋送的服務，像是金融交易平台。若為全雙工通訊，透過 WebSocket 連線的資料可以雙向流通。

WebSocket 功能會自動啟用，以使用任何分佈。若要使用 WebSocket，請在連接至分佈的快取行為中設定下列其中一項：
+ 轉送所有檢視器請求標頭到原始伺服器。您可以使用 [AllViewer 受管原始伺服器請求政策](using-managed-origin-request-policies.md#managed-origin-request-policy-all-viewer)。
+ 具體轉送您原始伺服器請求政策中的 `Sec-WebSocket-Key` 和 `Sec-WebSocket-Version` 請求標頭。

## WebSocket 通訊協定的運作方式
<a name="distribution-working-with.websockets.how-it-works"></a>

WebSocket 通訊協定是一種獨立的 TCP 型通訊協定，可讓您避免一些負荷，但可能增加 HTTP 的延遲。

若要建立 WebSocket 連線，用戶端會傳送一般 HTTP 請求，其會使用 HTTP 的升級語意來變更通訊協定。然後，伺服器便可以完成交握。WebSocket 連線會保持開啟狀態，而且用戶端或伺服器可以彼此傳送資料框架，而無需每次建立新連線。

根據預設，WebSocket 通訊協定會使用連接埠 80，進行一般 WebSocket 連線，以及使用連接埠 443，進行透過 TLS 的 WebSocket 連線。您為 CloudFront [檢視器通訊協定政策](DownloadDistValuesCacheBehavior.md#DownloadDistValuesViewerProtocolPolicy) 和 [通訊協定 (僅限自訂原始伺服器)](DownloadDistValuesOrigin.md#DownloadDistValuesOriginProtocolPolicy) 選擇的選項適用於 WebSocket 連線，也適用於 HTTP 流量。

## WebSocket 要求
<a name="distribution-working-with.websockets.requirements"></a>

WebSocket 請求必須必須採取以下標準格式，以符合 [RFC 6455](https://datatracker.ietf.org/doc/html/rfc6455)。

**Example 範例用戶端請求**  

```
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: https://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
```

**Example 範例伺服器回應**  

```
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat
```

如果 WebSocket 連線是由用戶端或伺服器中斷，或由於網路干擾而中斷，則預期用戶端應用程式會重新啟動與伺服器的連線。

## 建議的 WebSocket 標頭
<a name="distribution-working-with.websockets.recomended-settings"></a>

為了避免在使用 WebSockets 時發生非預期的壓縮相關問題，建議您在[原始伺服器請求政策](origin-request-create-origin-request-policy.md)中包含下列標頭：
+ `Sec-WebSocket-Key`
+ `Sec-WebSocket-Version`
+ `Sec-WebSocket-Protocol`
+ `Sec-WebSocket-Accept`
+ `Sec-WebSocket-Extensions`

**注意**  
目前，CloudFront 僅支援透過 HTTP/1.1 通訊協定的 WebSocket 連線。