Co to znaczy
Serwer zgadza się przełączyć na protokół, o który klient poprosił w nagłówku Upgrade, najczęściej WebSocket. Po tej odpowiedzi połączenie używa nowego protokołu.
Typowe przyczyny
- Uzgadnianie WebSocket powiodło się
- Klient poprosił o przejście na h2c (HTTP/2 bez szyfrowania)
- Zaakceptowano niestandardową zmianę protokołu
Jak naprawić
Jako klient lub odwiedzający
Dla WebSocket 101 oznacza sukces. Jeśli spodziewałeś się 101, a dostałeś 200 lub 400, sprawdź, czy URL wskazuje na endpoint WebSocket i czy proxy przekazują nagłówki Upgrade i Connection.
Jako właściciel strony lub API
Za nginx lub load balancerem przekazuj Upgrade i Connection jawnie (proxy_set_header Upgrade $http_upgrade; Connection "upgrade") i zwiększ limity bezczynności dla długich połączeń.
Przykładowa odpowiedź
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= Specyfikacja
FAQ
› Dlaczego mój WebSocket zwraca 400 zamiast 101?
Brakowało nagłówków uzgadniania albo zostały zmienione, często przez proxy usuwające Upgrade/Connection, albo Sec-WebSocket-Key lub wersja są nieprawidłowe.
› Czy HTTP/2 używa 101?
Tylko przy rzadkim przejściu h2c bez szyfrowania. Przeglądarki negocjują HTTP/2 przez TLS ALPN, a samo HTTP/2 nie ma odpowiedzi 101.