将 WebSocket 与 CloudFront 分配结合使用 - Amazon CloudFront
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

将 WebSocket 与 CloudFront 分配结合使用

Amazon CloudFront 支持使用 WebSocket,后者是一种基于 TCP 的协议,它在客户端和服务器之间需要长期双向连接时很有用。对于实时应用程序,持久连接通常是必需的。可使用 Websocket 的场景包括社交聊天平台、在线协作工作区、多玩家游戏和提供实时数据馈送(如金融贸易平台)的服务。对于全双工通信,通过 WebSocket 连接的数据可双向流动。

CloudFront 全局支持 WebSocket 连接,而无需额外配置。所有 CloudFront 分配都具有内置 WebSocket 协议支持,前提是客户端和服务器也支持此协议。

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 时出现与压缩相关的意外问题,建议您在源请求策略中包含以下标头:

  • Sec-WebSocket-Key

  • Sec-WebSocket-Version

  • Sec-WebSocket-Protocol

  • Sec-WebSocket-Accept

  • Sec-WebSocket-Extensions