你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Front Door WebSocket(Azure 前置门 WebSocket)

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

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

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

在 Azure Front Door 上使用 WebSocket

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

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

WebSocket 协议的工作原理

WebSocket 协议使用 80 端口进行标准 WebSocket 连接,使用 443 端口进行基于 TLS/SSL 的 WebSocket 连接。 作为一种有状态协议,客户端与服务器之间的连接会保持活动状态,直到任一方终止连接。 WebSocket 连接以 HTTP 升级请求开头,使用 ws:wss: 方案。 这些连接需要使用 Connection: UpgradeUpgrade: websocketSec-WebSocket-KeySec-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: UpgradeUpgrade: 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 连接因客户端或服务器或网络中断而断开连接,则客户端应用程序应重新发起与服务器的连接。

后续步骤