TrueURL
TrueURL

Меню

101 Switching Protocols

Сервер принимает запрос клиента на Upgrade и переключает соединение на другой протокол — на практике почти всегда на WebSocket.

Поясняющая фраза
Switching Protocols
Редирект
Нет
Кэшируется по умолчанию
Нет

101 Switching Protocols означает, что сервер принимает заголовок запроса Upgrade, отправленный клиентом. Сразу после пустой строки, которой заканчивается ответ 101, обе стороны начинают общаться по этому соединению на другом протоколе. Ответ должен содержать заголовок Upgrade с названием нового протокола.

Сегодня это почти всегда рукопожатие WebSocket. Браузер отправляет GET с заголовками Upgrade: websocket, Connection: Upgrade и Sec-WebSocket-Key. Сервер отвечает 101 с соответствующим Sec-WebSocket-Accept, и дальше стороны обмениваются фреймами WebSocket. Раньше код 101 использовался и для перехода h2c с незашифрованного HTTP/1.1 на HTTP/2, но этот механизм устарел: теперь браузеры согласуют HTTP/2 и HTTP/3 во время TLS-рукопожатия (ALPN).

Механизм Upgrade существует только в HTTP/1.1. HTTP/2 и HTTP/3 никогда не отправляют 101: WebSocket поверх этих протоколов работает через расширенный метод CONNECT (RFC 8441 и RFC 9220).

Пример ответа

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

SEO и проверка редиректов

Обычный запрос страницы никогда не заканчивается кодом 101. Браузеры и поисковые роботы получают его, только если сами явно просят сменить протокол соединения, поэтому на индексацию он не влияет. Проверка редиректов отправляет обычные запросы GET, HEAD или POST и 101 не увидит. Если проверить эндпоинт WebSocket как обычный URL, он, как правило, ответит кодом 4xx, например 426 Upgrade Required или 400 Bad Request.

Типичные причины и сценарии использования

  • Браузер открывает WebSocket (new WebSocket('wss://...')), и сервер принимает рукопожатие.
  • Клиент запрашивает устаревший переход h2c на незашифрованный HTTP/2, и сервер его поддерживает.
  • WebSocket не работает за обратным прокси, потому что прокси не передает заголовки Upgrade и Connection. В nginx укажите proxy_http_version 1.1 и передавайте оба заголовка бэкенду.

Проверка редиректов URL

Бесплатная проверка редиректов TrueURL покажет все коды ответа, которые возвращает URL, — на каждом переходе цепочки.