Що це означає
Сервер погоджується перейти на протокол, який клієнт запросив у заголовку 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 немає.