将 WebSocket 与 CloudFront 分配结合使用 - Amazon CloudFront

将 WebSocket 与 CloudFront 分配结合使用

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

WebSocket 功能会自动启用,以便与任何分配结合使用。要使用 WebSocket,请在附加到您的分配的缓存行为中配置以下内容之一:

  • 将所有查看器请求标头转发到源。(您可以使用 AllViewer 托管源请求策略。)

  • 具体而言,就是在您的源请求策略中转发 Sec-WebSocket-KeySec-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