En-tête Upgrade
L'en-tête de requête et de réponse HTTP Upgrade peuvent être utilisés pour basculer une connexion client/serveur déjà établie sur un autre protocole (en conservant le même protocole de transport). Par exemple, un client peut utiliser cet en-tête pour mettre à niveau une connexion HTTP/1.1 vers HTTP/2, ou une connexion HTTP(S) vers une connexion WebSocket.
Attention : HTTP/2 interdit explicitement l'usage de cet en-tête et de ce mécanisme. Il est réservé à HTTP/1.1.
| Type d'en-tête | En-tête de requête, en-tête de réponse |
|---|---|
| En-tête de requête interdit | Oui |
Syntaxe
Upgrade: <protocol>[/<protocol_version>]
Upgrade: <protocol>[/<protocol_version>], …, <protocolN>[/<protocol_versionN>]
Directives
<protocol>-
Les protocoles sont listés, séparés par des virgules, par ordre de préférence décroissant.
<protocol_version>Facultatif-
Une version de protocole optionnelle peut être fournie, précédée d'une
/(barre oblique).
Description
L'en-tête Upgrade peut être utilisé par les clients pour inviter un serveur à basculer sur l'un des protocoles indiqués dans na liste triée par ordre de préférence décroissant.
Un client peut par exemple envoyer la requête GET suivante, indiquant les protocoles préférés vers lesquels basculer (ici, exemple/1, puis toto/2) :
GET /index.html HTTP/1.1
Host: www.exemple.com
Connection: upgrade
Upgrade: exemple/1, toto/2
Note :
L'en-tête Connection avec le type Upgrade doit toujours être envoyé avec l'en-tête Upgrade.
Le serveur est libre d'ignorer la requête et répondre alors comme si l'en-tête Upgrade n'a pas été envoyé (par exemple avec un statut 200 OK).
Si le serveur décide de mettre à niveau la connexion, il doit :
-
Renvoyer une réponse avec le statut
101 Switching Protocolset qui contient un en-têteUpgradeindiquant le(s) protocole(s) sur le(s)quel(s) basculer. Par exemple :httpHTTP/1.1 101 Switching Protocols Upgrade: toto/2 Connection: Upgrade -
Envoyer une réponse à la requête originelle en utilisant le nouveau protocole (le serveur ne peut basculer sur un protocole que s'il est en mesure de répondre à la requête originelle avec celui-ci).
Un serveur peut également envoyer cet en-tête lors d'une réponse 426 Upgrade Required pour indiquer que le serveur ne traitera pas la requête avec le protocole actuel, mais peut le faire si le protocole est changé. Le client peut alors initier un changement de protocole comme vu ci-avant.
Pour plus de détails et d'exemples, voir l'article sur le mécanisme de mise à niveau du protocole.
Exemples
>L'en-tête Upgrade avec plusieurs protocoles
La requête suivante liste plusieurs protocoles par ordre de préférence décroissant :
Connection: upgrade
Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
Passer à WebSocket
Ceci est une combinaison courante d'en-têtes utilisée pour commencer à mettre à niveau une connexion HTTP vers WebSockets. Voir Passer à une connexion WebSocket pour plus d'informations.
Connection: Upgrade
Upgrade: websocket
Spécifications
| Spécification |
|---|
| HTTP Semantics> # field.upgrade> |
| HTTP Semantics> # status.426> |
| HTTP/2> # informational-responses> |
Compatibilité des navigateurs
Voir aussi
- Mécanisme de mise à niveau du protocole
- Le code de statut
101 Switching Protocols - Le code de statut
426 Upgrade Required - L'en-tête
Connection