本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 WebSockets 搭配 CloudFront 分佈
Amazon CloudFront 支援使用 WebSocket,這是一種 TCP 型通訊協定,當您在用戶端與伺服器之間需要長時間的雙向連線時,此通訊協定很有用。持久性連線通常是即時應用程式的一項要求。您可能在其中使用 WebSockets 的案例包括社交聊天平台、線上協作工作區、多玩家遊戲,以及可提供即時資料饋送的服務,像是金融交易平台。若為全雙工通訊,透過 WebSocket 連線的資料可以雙向流通。
WebSocket 功能會自動啟用,以使用任何分佈。若要使用 WebSocket,請在連接至分佈的快取行為中設定下列其中一項:
-
轉送所有檢視器請求標頭到原始伺服器。您可以使用 AllViewer 受管原始伺服器請求政策。
-
具體轉送您原始伺服器請求政策中的
Sec-WebSocket-Key和Sec-WebSocket-Version請求標頭。
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
注意
目前,CloudFront 僅支援透過 HTTP/1.1 通訊協定的 WebSocket 連線。