Le client doit passer à un autre protocole.
Quand l’utiliser
Pour imposer une version plus récente de TLS ou HTTP.
Causes courantes et solutions
426 signifie que le serveur refuse de traiter la requête avec le protocole actuel et liste ceux qu’il accepte dans un en-tête Upgrade. Vous le voyez le plus souvent avec un point de terminaison WebSocket ouvert par une simple requête HTTP, dans un onglet de navigateur ou avec curl : le serveur attendait Upgrade: websocket. Cela arrive aussi quand un reverse proxy supprime les en-têtes Upgrade et Connection en route vers un serveur WebSocket.
Ce n’est pas le bon outil pour faire passer les visiteurs de HTTP à HTTPS : les navigateurs ne basculent pas d’eux-mêmes après un 426, utilisez donc une redirection 301 ou 308 avec HSTS. Certaines API utilisent 426 pour forcer la mise à jour des versions obsolètes d’applications mobiles, avec un message dans le corps. Si un proxy est en cause, nginx a besoin de proxy_http_version 1.1 et de transmettre les deux en-têtes.
Erreur client (4xx)
Les codes 4xx sont des erreurs client : la requête elle-même est incorrecte, non autorisée ou vise quelque chose qui n’existe pas. Renvoyer la même requête ne servira à rien.
À quoi ça ressemble
HTTP/1.1 426 Upgrade RequiredComment l’envoyer
| Node.js / Express | res.status(426).end() |
|---|---|
| Python / Flask | return '', 426 |
| nginx | return 426; |
Comment le vérifier
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/