Upgrade
Utilisation
L’en-tête Upgrade permet de négocier un protocole sur une connexion HTTP/1.1 existante. Le client envoie cet en-tête pour proposer le passage à un autre protocole ; le serveur accepte en répondant 101 Switching Protocols, ou bien ignore la demande et poursuit avec le protocole courant.
Les cibles de mise à niveau courantes sont WebSocket (websocket), TLS (TLS/1.2, TLS/1.3) et HTTP/2 en clair (h2c). La mise à niveau vers WebSocket est la forme la plus répandue dans les déploiements modernes : elle permet une communication bidirectionnelle simultanée entre navigateurs et serveurs.
L’en-tête Connection est requis aux côtés de Upgrade. L’émetteur positionne Connection: upgrade pour signaler aux intermédiaires de relayer la demande de mise à niveau au lieu de consommer eux-mêmes la connexion.
Un serveur envoie également Upgrade dans le cadre d’une réponse 426 Upgrade Required. Il indique ainsi au client qu’il refuse de traiter la requête avec le protocole courant et il liste le protocole requis dans la valeur de Upgrade.
Remarque
L’en-tête Upgrade s’applique uniquement à HTTP/1.1. HTTP/2 et HTTP/3 utilisent ALPN (Application-Layer Protocol Negotiation) pendant la poignée de main TLS pour sélectionner le protocole.
websocket
Fait passer la connexion au protocole WebSocket pour une communication bidirectionnelle simultanée. Le client joint les en-têtes Sec-WebSocket-Key et Sec-WebSocket-Version à la demande de mise à niveau.
h2c
Fait passer la connexion à HTTP/2 en clair (sans TLS). Le client joint l’en-tête HTTP2-Settings contenant les paramètres de connexion HTTP/2 encodés en base64url.
TLS/1.2, TLS/1.3
Fait passer une connexion HTTP non chiffrée à une connexion sécurisée par TLS. Ce mécanisme est moins courant que l’établissement direct de TLS.
Exemple
Un client demande une mise à niveau vers WebSocket. Le serveur accepte en répondant 101 Switching Protocols et en confirmant le nouveau protocole.
GET /chat HTTP/1.1
Host: example.re
Connection: upgrade
Upgrade: websocket
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Un client propose de passer à HTTP/2 en clair. L’en-tête HTTP2-Settings transporte les paramètres HTTP/2 initiaux encodés au format base64url.
GET / HTTP/1.1
Host: example.re
Connection: upgrade, HTTP2-Settings
Upgrade: h2c
HTTP2-Settings: AAMAAABkAAQCAAAAAAIAAAAA
Un serveur exige que le client utilise un autre protocole. La réponse 426 Upgrade Required inclut l’en-tête Upgrade listant le protocole acceptable.
HTTP/1.1 426 Upgrade Required
Upgrade: TLS/1.3
Connection: upgrade