101 Switching Protocols

Le serveur passe au protocole demandé par le client.

Quand l’utiliser

Passage d’une connexion à WebSocket.

Bon à savoir

Vous voyez presque toujours 101 lors d’un handshake WebSocket : le client envoie Upgrade: websocket et Connection: Upgrade, et le serveur répond 101 avec Sec-WebSocket-Accept. Si vous obtenez 200, 400 ou 426 à la place, un intermédiaire a supprimé les en-têtes Upgrade. Derrière nginx, vous devez les transmettre explicitement avec proxy_http_version 1.1, proxy_set_header Upgrade $http_upgrade et proxy_set_header Connection upgrade.

Après le basculement, les délais d’inactivité deviennent le problème suivant : nginx ferme les connexions proxifiées après proxy_read_timeout, 60 secondes par défaut, et AWS ALB a un délai d’inactivité de 60 secondes, donc les sockets silencieux ont besoin de pings. HTTP/2 n’utilise pas du tout 101 ; les WebSockets sur HTTP/2 utilisent le CONNECT étendu de la RFC 8441. Un 101 n’a pas de corps et n’est jamais mis en cache.

Information (1xx)

Les codes 1xx sont informatifs : le serveur a reçu la requête et l’échange se poursuit. Les navigateurs et les bibliothèques HTTP les gèrent pour vous.

À quoi ça ressemble

HTTP/1.1 101 Switching Protocols

Comment le vérifier

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

Ouvrir l’outil Codes de statut HTTP