Поделиться через


Azure Front Door WebSocket

Azure Front Door поддерживает WebSocket на уровнях "Стандартный" и "Премиум", не требуя дополнительных конфигураций. WebSocket, стандартизированный в RFC6455, — это протокол на основе TCP, который упрощает полнодуплексное взаимодействие между сервером и клиентом через длительное TCP-подключение. Это устраняет необходимость опроса по мере необходимости в HTTP и позволяет избежать некоторых затрат на HTTP. Он может повторно использовать одно и то же TCP-подключение для нескольких запросов или ответов, что приводит к более эффективному использованию ресурсов. Это обеспечивает более интерактивные сценарии в режиме реального времени.

WebSocket идеально подходит для приложений, требующих обновлений в режиме реального времени или непрерывных потоков данных, таких как приложения чата, панели мониторинга, финансовые обновления, GPS, онлайн-образование, потоковая трансляция и игры. Например, торговый веб-сайт может использовать WebSocket для отправки и обновления данных о ценах в режиме реального времени.

Использование WebSocket в Azure Front Door

При использовании WebSocket в Azure Front Door следует учитывать следующее:

  • После обновления подключения до WebSocket Azure Front Door передает данные между клиентами и сервером-источником без каких-либо проверок или манипуляций во время установленного подключения.
  • Проверки брандмауэра веб-приложений (WAF) осуществляются при установлении WebSocket. После установки подключения WAF не выполняет дальнейшие проверки.
  • Проверки работоспособности источников выполняются с помощью протокола HTTP.
  • Отключите кэширование для маршрутов WebSocket. Для маршрутов с включенным кэшированием Azure Front Door не перенаправляет заголовок обновления WebSocket в источник и обрабатывает его как HTTP-запрос, игнорируя правила кэша. Это приводит к сбою запроса на обновление WebSocket.
  • Время ожидания простоя — 5 минут. Если Azure Front Door не обнаруживает передачу данных из источника или клиента за последние 5 минут, подключение считается неактивным и закрывается.
  • В настоящее время подключения WebSocket в Azure Front Door остаются открытыми не более 4 часов. Подключение WebSocket можно удалить из-за обновлений базового сервера или других действий по обслуживанию. Мы настоятельно рекомендуем реализовать логику повторных попыток в приложении.
  • В настоящее время каждый профиль Azure Front Door поддерживает до 3000 одновременных глобальных подключений. Дополнительные сведения см. в разделе Ограничения служб Azure Front Door уровня Standard и Premium.

Как работает протокол WebSocket

Протоколы WebSocket используют порт 80 для стандартных подключений WebSocket и порта 443 для подключений WebSocket по протоколу TLS/SSL. Как протокол, сохраняющий состояние, подключение между клиентами и сервером остается активным, пока не будет завершено либо клиентом, либо сервером. Подключения WebSocket начинаются как запрос на обновление HTTP в рамках схемы ws: или wss:. Эти подключения устанавливаются путем обновления HTTP-запроса/ответа с помощью заголовков Connection: Upgrade, Upgrade: websocket, Sec-WebSocket-Key и Sec-WebSocket-Version, как показано в примерах заголовков запроса.

Рукопожатие от клиента выглядит следующим образом:

    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 отключается клиентом или сервером или сбоем в сети, клиентское приложение, как ожидается, переинициирует соединение с сервером.

Следующие шаги