搭配 CloudFront 分佈使用 WebSockets - Amazon CloudFront

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

搭配 CloudFront 分佈使用 WebSockets

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

WebSocket 功能會自動啟用,以使用任何分佈。若要使用 WebSockets請在連接至分佈的快取行為中設定下列其中一項:

  • 將所有檢視器請求標頭轉送到您的原始伺服器。您可以使用 AllViewer 受管原始伺服器請求政策

  • 具體轉送原始伺服器Sec-WebSocket-Version請求政策中的 Sec-WebSocket-Key和 請求標頭。

WebSocket 通訊協定的運作方式

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

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

根據預設,WebSocket 通訊協定會將連接埠 80 用於一般 WebSocket 連線,並將連接埠 443 用於透過 TLS 的 WebSocket 連線。您為 CloudFront 選擇檢視器通訊協定政策通訊協定 (僅限自訂原始伺服器)套用至 WebSocket 連線和 HTTP 流量的選項。

WebSocket 要求

WebSocket 請求必須必須採取以下標準格式,以符合 RFC 6455

範例 用戶端請求範例
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
範例 伺服器回應範例
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= Sec-WebSocket-Protocol: chat

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

建議的 WebSocket 標頭

為了避免在使用 WebSockets時發生非預期的壓縮相關問題,建議您在原始伺服器請求政策中包含下列標頭:

  • Sec-WebSocket-Key

  • Sec-WebSocket-Version

  • Sec-WebSocket-Protocol

  • Sec-WebSocket-Accept

  • Sec-WebSocket-Extensions