HTTPQUERY
Français

426 Upgrade Required

Utilisation

Lorsque le code de statut 426 Upgrade Required est reçu, la réponse comporte un champ d’en-tête de réponse Upgrade indiquant le ou les protocoles requis.

Ce message est lié au message 101 Switching Protocols, envoyé en réponse à une demande de mise à niveau de protocole émise par le client au moyen de l’en-tête Upgrade.

Impact SEO

Les moteurs de recherche comme Google n’indexent pas une URL dont la réponse a le statut 426. Les URL précédemment indexées qui renvoient ce code de statut sont retirées des résultats de recherche.

Exemple

Le client demande une ressource en HTTP en clair et le serveur répond 426 Upgrade Required parce que TLS est obligatoire. Le client bascule vers HTTPS et la requête aboutit.

HTTP/2 et HTTP/3

HTTP/2 et HTTP/3 se négocient par ALPN pendant la poignée de main TLS, et non par l’en-tête Upgrade. Le mécanisme de mise à niveau HTTP/2 en clair (h2c) a été retiré de la spécification. L’en-tête Upgrade s’applique aux changements de protocole tels que TLS et WebSocket.

Requête initiale

GET /tech-news HTTP/1.1
Host: example.com

Réponse initiale

HTTP/1.1 426 Upgrade Required
Upgrade: TLS/1.2
Connection: upgrade
Content-Type: text/html
Content-Length: 140

<html>
  <head>
    <title>TLS Required</title>
  </head>
  <body>
   <p>This service requires TLS.</p>
  </body>
</html>

Requête suivante en HTTPS

GET /tech-news HTTP/1.1
Host: example.com

Réponse

HTTP/1.1 200 OK
Content-Type: text/html

Comment corriger

Lisez l’en-tête Upgrade de la réponse pour identifier le protocole requis. Le serveur y liste un ou plusieurs protocoles acceptables tels que TLS/1.2, HTTP/2, HTTP/3 ou websocket.

Pour une mise à niveau de version de protocole, faites basculer le client vers le protocole indiqué et renvoyez la requête. HTTP/2 et HTTP/3 utilisent ALPN pendant la poignée de main TLS plutôt que l’en-tête Upgrade. Pour d’autres protocoles comme WebSocket, incluez Connection: upgrade et l’en-tête Upgrade correspondant. Le serveur répond 101 Switching Protocols et la connexion se poursuit sous le nouveau protocole.

Pour les connexions WebSocket passant par nginx, configurez le proxy afin qu’il transmette les en-têtes upgrade :

Sans ces directives, nginx utilise HTTP/1.0 par défaut pour les connexions amont et supprime les en-têtes upgrade, ce qui produit un 426 à chaque tentative de poignée de main WebSocket.

Lorsqu’un serveur impose HTTPS, remplacez le schéma de l’URL de la requête, http://, par https://. Vérifiez que TLS 1.2 ou TLS 1.3 est activé dans le client ou dans l’environnement d’exécution. Les versions TLS plus anciennes sont généralement rejetées.

Mettez à jour les bibliothèques clientes et les SDK lorsqu’ils ne prennent pas en charge le protocole requis. Les bibliothèques HTTP obsolètes utilisent HTTP/1.1 par défaut et n’ont aucune capacité de négociation HTTP/2 ou HTTP/3.

Supprimez les en-têtes Upgrade superflus des requêtes qui ne visent pas un changement de protocole. Certains proxys interprètent un en-tête Upgrade parasite comme une tentative de négociation de protocole et renvoient 426.

Références de code

.NET

HttpStatusCode.UpgradeRequired

Rust

http::StatusCode::UPGRADE_REQUIRED

Rails

:upgrade_required

Go

http.StatusUpgradeRequired

Symfony

Response::HTTP_UPGRADE_REQUIRED

Python3.5+

http.HTTPStatus.UPGRADE_REQUIRED

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_UPGRADE_REQUIRED

Angular

@angular/common/http/HttpStatusCode.UpgradeRequired