426 Upgrade Required

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 Required

Como enviar

Node.js / Expressres.status(426).end()
Python / Flaskreturn '', 426
nginxreturn 426;

Como verificar

curl -s -o /dev/null -w "%{http_code}\n" https://example.com/

Abrir Códigos de status HTTP