Signification
Le serveur accepte de passer au protocole demandé par le client dans l'en-tête Upgrade, le plus souvent WebSocket. Après cette réponse, la connexion utilise le nouveau protocole.
Causes courantes
- Une poignée de main WebSocket a réussi
- Le client a demandé une mise à niveau h2c (HTTP/2 en clair)
- Une mise à niveau vers un protocole personnalisé a été acceptée
Comment corriger
Côté client ou visiteur
101 signifie un succès pour WebSocket. Si vous attendiez 101 et recevez 200 ou 400, vérifiez que l'URL pointe vers le point de terminaison WebSocket et que les proxys transmettent les en-têtes Upgrade et Connection.
Côté propriétaire du site ou de l’API
Derrière nginx ou un répartiteur de charge, transmettez explicitement Upgrade et Connection (proxy_set_header Upgrade $http_upgrade; Connection "upgrade") et augmentez les délais d'inactivité pour les sockets de longue durée.
Exemple de réponse
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= Spécification
FAQ
› Pourquoi mon WebSocket renvoie-t-il 400 au lieu de 101 ?
Les en-têtes de la poignée de main manquaient ou ont été modifiés, souvent par un proxy qui supprime Upgrade/Connection, ou la Sec-WebSocket-Key ou la version est invalide.
› HTTP/2 utilise-t-il 101 ?
Seulement pour la rare mise à niveau h2c en clair. Les navigateurs négocient HTTP/2 via TLS ALPN, et HTTP/2 n'a pas de réponse 101.