Что это значит
Сервер соглашается перейти на протокол, запрошенный клиентом в заголовке Upgrade, чаще всего WebSocket. После этого ответа соединение работает по новому протоколу.
Типичные причины
- Рукопожатие WebSocket прошло успешно
- Клиент запросил переход на h2c (HTTP/2 без шифрования)
- Принят переход на собственный протокол
Как исправить
Если вы клиент или посетитель
Для WebSocket 101 означает успех. Если вы ждали 101, а получили 200 или 400, проверьте, что URL указывает на WebSocket-эндпоинт и что прокси передают заголовки Upgrade и Connection.
Если вы владелец сайта или API
За nginx или балансировщиком явно передавайте Upgrade и Connection (proxy_set_header Upgrade $http_upgrade; Connection "upgrade") и увеличьте тайм-ауты простоя для долгоживущих сокетов.
Пример ответа
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= Спецификация
Частые вопросы
› Почему мой WebSocket возвращает 400 вместо 101?
Заголовки рукопожатия отсутствуют или изменены — часто прокси удаляет Upgrade/Connection — либо неверны Sec-WebSocket-Key или версия.
› Использует ли HTTP/2 код 101?
Только для редкого перехода на h2c без шифрования. Браузеры согласуют HTTP/2 через TLS ALPN, а в самом HTTP/2 ответа 101 нет.