将 WebSocket 与 CloudFront 分配结合使用
Amazon CloudFront 支持使用 WebSocket,后者是一种基于 TCP 的协议,它在客户端和服务器之间需要长期双向连接时很有用。对于实时应用程序,持久连接通常是必需的。可使用 Websocket 的场景包括社交聊天平台、在线协作工作区、多玩家游戏和提供实时数据馈送(如金融贸易平台)的服务。对于全双工通信,通过 WebSocket 连接的数据可双向流动。
WebSocket 功能会自动启用,以便与任何分配结合使用。要使用 WebSocket,请在附加到您的分配的缓存行为中配置以下内容之一:
将所有查看器请求标头转发到源。(您可以使用 AllViewer 托管源请求策略。)
具体而言,就是在您的源请求策略中转发
Sec-WebSocket-Key
和Sec-WebSocket-Version
请求标头。
WebSocket 协议的工作原理
WebSocket 协议是一种独立的、基于 TCP 的协议,可让您避免 HTTP 的一些开销和潜在的延迟增加。
为了建立 WebSocket 连接,客户端将发送使用 HTTP 升级语义更改协议的常规 HTTP 请求。随后,服务器可以完成握手。WebSocket 连接将保持打开状态,并且客户端或服务器可以相互发送数据帧,而无需每次都建立新连接。
默认情况下,WebSocket 协议使用端口 80(对于常规 WebSocket 连接)和端口 443(对于通过 TLS/SSL 的 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 标头
为了避免在使用 WebSocket 时出现与压缩相关的意外问题,建议您在源请求策略中包含以下标头:
-
Sec-WebSocket-Key
-
Sec-WebSocket-Version
-
Sec-WebSocket-Protocol
-
Sec-WebSocket-Accept
-
Sec-WebSocket-Extensions