Azure Front Door WebSocket(Azure 前置门 WebSocket)

适用于: ✔️ Front Door 标准 ✔️ Front Door 高级版

Azure Front Door 支持标准层和高级层上的 WebSocket,而无需任何额外的配置。 以 RFC6455 进行标准化的 WebSocket 是基于 TCP 的协议,通过长时间运行的 TCP 连接,在服务器和客户端之间实现全双工通信。 此协议无需在 HTTP 中进行必要轮询,因此减少了部分 HTTP 开销。 它可以对多个请求或响应重复使用同一 TCP 连接,进而提高了资源利用率。 这种效率使得更多互动和实时的场景得以实现。

WebSocket 非常适合需要实时更新或连续数据流的应用程序,例如聊天应用、仪表板、财务更新、GPS、在线教育、实时传送视频流和游戏。 例如,交易网站可以使用 WebSocket 实时推送和更新定价数据。

注释

Front Door 不支持服务器发送事件 (SSE)。

在 Azure Front Door 上使用 WebSocket

在Azure Front Door上使用WebSocket时,请考虑以下几点:

  • 升级连接到WebSocket后,Azure Front Door在客户端和原始服务器之间传输数据,且在建立连接期间不进行任何检查或操作。
  • Web 应用程序防火墙 (WAF) 检查会在 WebSocket 建立阶段进行。 建立连接后,WAF 不会执行进一步检查。
  • Azure Front Door 使用 HTTP 协议来检测来源的健康状况。
  • WebSocket 路由禁用缓存。 对于启用了缓存的路由,Azure Front Door 不会将 WebSocket 升级标头转发到源,而是将其视为 HTTP 请求,忽略缓存规则。 这种行为会导致 WebSocket 升级请求失败。
  • 空闲超时时间为五分钟。 如果 Azure Front Door 在过去五分钟内没有检测到来自源端或客户端的任何数据传输,连接将被视为空闲并关闭。
  • 目前,Azure Front Door 上的 WebSocket 连接保持开放时间不超过两小时。 由于底层服务器升级或其他维护活动,WebSocket 连接可能会被中断。 在应用程序中实现重试逻辑。
  • 目前,每个 Azure Front Door 配置文件最多支持 3,000 个并发全局连接。 有关详细信息,请参阅 Azure Front Door 标准和高级服务限制。

WebSocket 协议的工作原理

WebSocket 协议使用 80 端口进行标准 WebSocket 连接,使用 443 端口进行基于 TLS/SSL 的 WebSocket 连接。 作为一种有状态协议,客户端与服务器之间的连接会保持活动状态,直到任一方终止连接。 WebSocket 连接以 HTTP 升级请求开头,使用 ws: 或 wss: 方案。 你通过使用 Connection: Upgrade、Upgrade: websocket、Sec-WebSocket-Key 和 Sec-WebSocket-Version 标头将 HTTP 请求/响应升级来建立这些连接,如请求标头示例中所示。

客户端的握手请求如下所示:

    GET /chat HTTP/1.1
    Host: server.example.com
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
    Origin: http://example.com
    Sec-WebSocket-Protocol: chat, superchat
    Sec-WebSocket-Version: 13

服务器使用 101 Switching Protocols 状态代码进行响应,以指示它正在根据客户端请求切换到 WebSocket 协议。 响应包括 Connection: Upgrade 和 Upgrade: websocket 标头,确认协议切换。 返回 Sec-WebSocket-Accept 标头是为了验证连接是否已成功升级。

服务器的握手请求如下所示:

    HTTP/1.1 101 Switching Protocols
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
    Sec-WebSocket-Protocol: chat

客户端收到服务器响应后,WebSocket 连接将打开以开始传输数据。 如果 WebSocket 连接因客户端或服务器或网络中断而断开连接,则客户端应用程序应重新发起与服务器的连接。