TrueURL

101 Switching Protocols

Serwer przyjmuje żądanie Upgrade klienta i przełącza to połączenie na inny protokół – w praktyce niemal zawsze na WebSocket.

Opis słowny
Switching Protocols
Przekierowanie
Nie
Domyślne buforowanie
Nie

101 Switching Protocols oznacza, że serwer przyjmuje nagłówek żądania Upgrade wysłany przez klienta. Zaraz po pustym wierszu kończącym odpowiedź 101 obie strony zaczynają komunikować się w tym połączeniu innym protokołem. Odpowiedź musi zawierać nagłówek Upgrade z nazwą nowego protokołu.

Obecnie jest to niemal zawsze uzgadnianie połączenia WebSocket (handshake). Przeglądarka wysyła żądanie GET z nagłówkami Upgrade: websocket, Connection: Upgrade i Sec-WebSocket-Key. Serwer odpowiada kodem 101 z pasującym nagłówkiem Sec-WebSocket-Accept i od tej chwili obie strony wymieniają ramki WebSocket. Kod 101 służył też do przełączania h2c z nieszyfrowanego HTTP/1.1 na HTTP/2 – mechanizmu, który jest dziś wycofany. Przeglądarki negocjują zamiast tego HTTP/2 i HTTP/3 podczas uzgadniania TLS (ALPN).

Mechanizm Upgrade istnieje tylko w HTTP/1.1. HTTP/2 i HTTP/3 nigdy nie wysyłają kodu 101; WebSockety w tych protokołach korzystają z rozszerzonej metody CONNECT (RFC 8441 i RFC 9220).

Przykładowa odpowiedź

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

SEO i sprawdzanie przekierowań

Kod 101 nigdy nie jest wynikiem zwykłego żądania strony. Przeglądarki i roboty indeksujące otrzymują go tylko wtedy, gdy wprost poproszą o przełączenie połączenia, więc nie ma on wpływu na indeksowanie. Narzędzie do sprawdzania przekierowań wysyła zwykłe żądania GET, HEAD lub POST i nie zobaczy kodu 101. Jeśli sprawdzisz endpoint WebSocket jak zwykły adres URL, zazwyczaj odpowie on kodem 4xx, np. 426 Upgrade Required lub 400 Bad Request.

Typowe przyczyny i zastosowania

  • Przeglądarka otwiera połączenie WebSocket (new WebSocket('wss://...')), a serwer akceptuje handshake.
  • Klient prosi o przestarzałe przełączenie h2c na nieszyfrowane HTTP/2, a serwer je obsługuje.
  • WebSockety nie działają za reverse proxy, bo proxy nie przekazuje nagłówków Upgrade i Connection. W nginx ustaw proxy_http_version 1.1 i przekaż oba nagłówki do backendu.

Sprawdzanie przekierowań URL

Zobacz wszystkie kody odpowiedzi, jakie zwraca adres URL, przeskok po przeskoku, w darmowym narzędziu TrueURL do sprawdzania przekierowań.