O cliente precisa mudar para outro protocolo.
Quando usar
Para forçar uma versão mais nova de TLS ou HTTP.
Causas comuns e soluções
O 426 significa que o servidor não atende a requisição no protocolo atual e lista os aceitos em um cabeçalho Upgrade. Na maioria das vezes você o vê vindo de um endpoint WebSocket aberto com uma requisição HTTP comum, em uma aba do navegador ou com curl: o servidor esperava Upgrade: websocket. Também acontece quando um proxy reverso descarta os cabeçalhos Upgrade e Connection no caminho até um servidor WebSocket.
Ele não é a ferramenta certa para levar visitantes de HTTP para HTTPS: os navegadores não fazem o upgrade sozinhos depois de um 426, então use um redirecionamento 301 ou 308 mais HSTS. Algumas APIs usam 426 para forçar versões desatualizadas de apps móveis a atualizar, com uma mensagem no corpo. Se a culpa for de um proxy, o nginx precisa de proxy_http_version 1.1 e dos dois cabeçalhos repassados.
Erro do cliente (4xx)
Os códigos 4xx são erros do cliente: a própria requisição está errada, não está autorizada ou aponta para algo que não existe. Repetir a mesma requisição não vai adiantar.
Como fica
HTTP/1.1 426 Upgrade RequiredComo enviar
| Node.js / Express | res.status(426).end() |
|---|---|
| Python / Flask | return '', 426 |
| nginx | return 426; |
Como verificar
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/