Klient musi przełączyć się na inny protokół.
Kiedy go używać
Wymuszenie nowszej wersji TLS lub HTTP.
Typowe przyczyny i rozwiązania
426 oznacza, że serwer nie obsłuży żądania w bieżącym protokole i wymienia akceptowane protokoły w nagłówku Upgrade. Najczęściej zobaczysz go z endpointu WebSocket otwartego zwykłym żądaniem HTTP, w karcie przeglądarki lub przez curl: serwer oczekiwał Upgrade: websocket. Zdarza się też, gdy reverse proxy gubi nagłówki Upgrade i Connection w drodze do serwera WebSocket.
To nie jest właściwe narzędzie do przenoszenia odwiedzających z HTTP na HTTPS: przeglądarki nie przejdą same na HTTPS po 426, więc użyj przekierowania 301 lub 308 i HSTS. Niektóre API używają 426, by wymusić aktualizację przestarzałych wersji aplikacji mobilnych, z komunikatem w treści. Jeśli winne jest proxy, nginx potrzebuje proxy_http_version 1.1 i przekazania obu nagłówków.
Błąd klienta (4xx)
Kody 4xx to błędy klienta: samo żądanie jest błędne, nieautoryzowane albo wskazuje na coś, czego nie ma. Ponowienie tego samego żądania nic nie da.
Jak to wygląda
HTTP/1.1 426 Upgrade RequiredJak go wysłać
| Node.js / Express | res.status(426).end() |
|---|---|
| Python / Flask | return '', 426 |
| nginx | return 426; |
Jak go sprawdzić
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/