FreeToGenerate.com

Tous les codes enregistrés, marqués de la seule chose que le registre ne dit pas. Rien n'est envoyé.

Le registre, selon ce qu'on peut réellement faire d'un code

lignes dans le registre
24
peuvent être envoyés
15
n'apparaissent jamais sur le fil
3
réservé, sans signification
1

Saisissez le numéro rapporté par votre client, ou une partie d'une signification. Un numéro sans ligne propre renvoie à la plage qui le contient.

CodeSignificationSur le filRéférence
1000Normal Closurepeut être envoyé[RFC6455]
1001Going Awaypeut être envoyé[RFC6455]
1002Protocol errorpeut être envoyé[RFC6455]
1003Unsupported Datapeut être envoyé[RFC6455]
1004Reservedréservé[RFC6455]
1005No Status Rcvdjamais envoyé[RFC6455]
1006Abnormal Closurejamais envoyé[RFC6455]
1007Invalid frame payload datapeut être envoyé[RFC6455]
1008Policy Violationpeut être envoyé[RFC6455]
1009Message Too Bigpeut être envoyé[RFC6455]
1010Mandatory Ext.peut être envoyé[RFC6455]
1011Internal Errorpeut être envoyé[RFC6455][RFC Errata 3227]
1012Service Restartpeut être envoyéenregistré par liste de diffusion
1013Try Again Laterpeut être envoyéenregistré par liste de diffusion
1014The server was acting as a gateway or proxy and received an invalid response from the upstream server. This is similar to 502 HTTP Status Code.peut être envoyéenregistré par liste de diffusion
1015TLS handshakejamais envoyé[RFC6455]
1016-2999plageUnassignednon attribué
3000Unauthorizedpeut être envoyé
3001-3002plageUnassignednon attribué
3003Forbiddenpeut être envoyé
3004-3007plageUnassignednon attribué
3008Timeoutpeut être envoyé
3009-3999plageUnassignednon attribué
4000-4999plageReserved for Private Usenon attribué[RFC6455]

Sur le fil

peut être envoyé
Une extrémité peut placer ce code dans une trame Close ; si vous l'avez reçu, l'autre partie l'a délibérément choisi.
jamais envoyé
La RFC 6455 interdit de le placer dans une trame Close. Si votre client le signale, aucune trame Close ne l'a transporté : votre bibliothèque l'a fabriqué localement pour décrire ce qui s'est passé.
réservé
Enregistré mais sans signification définie, et sans la clause qui en interdit l'envoi. Rien ne devrait l'utiliser.
non attribué
Une plage sans attribution, ou la plage d'usage privé que vous définissez vous-même.

Le 1006 ne circule jamais sur le fil

Voilà ce qu'il faut retenir, et aucune table recopiée du registre ne le montre. Trois codes — 1005, 1006 et 1015 — portent dans la RFC 6455 une phrase indiquant que chacun est une valeur réservée qui NE DOIT PAS être placée comme code d'état dans une trame de contrôle Close. Ils existent pour qu'une bibliothèque ait quelque chose à signaler quand il n'y a rien à signaler : aucun code n'est arrivé, ou la connexion est morte sans la moindre trame Close, ou la négociation TLS a échoué avant qu'un WebSocket n'existe.

Le 1006 n'est donc pas un message du serveur. Il signifie que votre client n'a jamais reçu de trame Close, et la cause se situe sous le protocole : une connexion coupée, un intermédiaire arrivé à expiration, une poignée de main jamais terminée. Déboguer cela en cherchant qui a envoyé 1006, c'est chercher quelqu'un qui n'existe pas.

Ce que le registre dit, et ce qu'il tait

L'IANA publie cinq colonnes : le code, sa signification, un contact, une référence et un responsable des modifications. Aucune colonne n'indique si un code peut être envoyé, si bien que 1000 et 1006 apparaissent comme des lignes de même nature, citant la même RFC. La distinction n'existe que dans la prose de cette RFC, et c'est pourquoi presque toutes les tables publiées la perdent.

Trois codes ont une provenance singulière qu'il vaut mieux montrer que gommer. 1012, 1013 et 1014 — redémarrage du service, réessayez plus tard, et une erreur de passerelle calquée sur le 502 de HTTP — ont été enregistrés par un message adressé à une liste de diffusion plutôt que par un document normatif, et la colonne référence du registre pointe vers ce message.

Les lignes proviennent du registre des codes de fermeture WebSocket de l'IANA ; la classification sur le fil vient de la section 7.4.1 de la RFC 6455, et le générateur refuse de construire si cette RFC ne contient plus la phrase qu'il attribue à chaque code. Rien n'est envoyé.

Aussi disponible en : English · Español · Português · العربية

Codes de fermeture WebSocket

La liste complète de l'IANA, avec les codes que la RFC 6455 interdit de placer dans une trame Close signalés pour ce qu'ils sont — dont celui qui vous amène probablement ici.

Qu'est-ce qu'un code de fermeture WebSocket ?

Lorsqu'une connexion WebSocket se termine proprement, la partie qui la ferme envoie une trame Close portant un nombre à quatre chiffres qui en donne la raison. 1000 signifie que la connexion s'est achevée normalement, 1001 que l'extrémité s'en va, 1011 que le serveur a rencontré une condition imprévue. Votre bibliothèque cliente vous montre ce nombre, et c'est généralement le seul indice dont vous disposez.

Ces nombres sont gérés par l'IANA dans un registre de vingt-quatre lignes : seize codes individuels dans les 1000, quelques attributions dans les 3000, et plusieurs plages non attribuées ou réservées à vos propres définitions. Cette page les liste tous, avec une recherche, et un nombre sans ligne propre renvoie à la plage qui le contient.

Elle signale aussi une chose que le registre ne peut pas signaler. Trois de ces codes ne sont pas du tout des messages, et l'un d'eux est très probablement la raison pour laquelle vous lisez ceci.

Comment l'utiliser

  1. Saisissez le nombre rapporté par votre client. La ligne correspondante apparaît en premier. Si le nombre n'a pas de ligne propre — n'importe lequel dans les 2000, ou un code d'usage privé dans les 4000 — vous obtenez la plage qui le couvre plutôt que rien du tout.
  2. Lisez l'état, pas seulement la signification. Chaque ligne indique si le code peut réellement être envoyé. C'est cette colonne qui vous dit si l'autre partie l'a choisi ou si votre propre bibliothèque l'a inventé.
  3. Cherchez aussi par mots. Taper une partie d'une signification fonctionne — abnormal, policy, restart — ce qui va plus vite quand on se souvient à moitié de la formule mais pas du nombre.

1006 n'est pas un message du serveur

Voilà ce qu'il faut retenir. Trois codes — 1005, 1006 et 1015 — portent chacun dans la RFC 6455 une phrase indiquant qu'il s'agit de valeurs réservées qui ne doivent pas être placées comme code d'état dans une trame de contrôle Close. Ce ne sont pas des choses qu'une extrémité peut envoyer. Ils existent pour qu'une bibliothèque ait quelque chose à signaler quand il n'y a rien à signaler.

1006 signifie que votre client n'a jamais reçu la moindre trame Close. Personne ne l'a choisi et personne ne l'a envoyé ; la bibliothèque l'a inscrit pour décrire une connexion qui s'est simplement arrêtée. La cause se situe donc sous le protocole : une connexion TCP coupée, un proxy ou un répartiteur de charge qui a expiré la socket, un réseau disparu, ou une poignée de main jamais achevée. Fouiller les journaux du serveur à la recherche de qui a envoyé 1006, c'est chercher quelqu'un qui n'existe pas.

1005 est la même idée d'un cran : une trame Close est bien arrivée, mais elle ne portait aucun code d'état, ce qui est licite. Et 1015 rapporte que TLS a échoué avant qu'il n'y ait de WebSocket dont parler. Tous trois sont votre propre côté décrivant sa situation, dans le vocabulaire que la spécification a réservé exactement à cela.

Il existe un quatrième état qu'on met facilement dans le même sac, à tort. 1004 est réservé avec sa signification indéfinie, et ne porte aucune clause en interdisant l'envoi : c'est simplement un nombre auquel personne n'a donné de rôle. Quatre états, donc, là où une table recopiée du registre en montre deux.

Ce que le registre dit, et ce qu'il tait

L'IANA publie cinq colonnes par ligne : le code d'état, sa signification, un contact, une référence et un responsable des modifications. Aucune colonne n'indique si un code peut être envoyé, et il n'y a pas moyen d'en ajouter une sans modifier le schéma du registre. La distinction ne vit que dans la prose de la section 7.4.1 de la RFC 6455.

C'est pourquoi tant de tables publiées la perdent. 1000 et 1006 sont des lignes de même forme, avec le même type de signification et la même référence à la même RFC : une table engendrée depuis le registre les dessine à l'identique. Rien dans les données ne dit que l'un est un message et l'autre une fiction locale.

Trois codes ont une provenance qu'il vaut mieux montrer que masquer. 1012, 1013 et 1014 — redémarrage du service, réessayez plus tard, et une erreur de passerelle calquée à dessein sur le 502 de HTTP — n'ont été définis par aucun document normatif. Ils ont été enregistrés par un message adressé à une liste de diffusion, et la colonne référence du registre pointe vers ce message plutôt que vers une RFC. Ils fonctionnent, ils sont largement implémentés, et ils sont arrivés là par un chemin différent de tout ce qui les entoure.

La limite assumée d'une page comme celle-ci est qu'elle est un instantané d'un registre qui peut gagner des lignes. Ce qui l'empêche de vieillir en silence, c'est que le générateur refuse de construire si la RFC 6455 ne contient plus la phrase exacte qu'il attribue à chacun des trois codes jamais envoyés : la classification ne peut donc pas s'éloigner de sa source sans faire échouer la compilation.

Pourquoi est-ce gratuit ?

La liste entière est dans la page, et la recherche s'exécute dans votre navigateur. Il n'y a rien à faire tourner sur un serveur, ni aucune raison de vous demander un compte.

Rien de ce que vous saisissez n'est envoyé, conservé ni journalisé. Vous arrivez généralement ici avec un code tiré d'un journal de production, et la façon fiable de garder cela privé est de ne jamais le recevoir.