FreeToGenerate.com

Todos los códigos registrados, marcados con lo único que el registro no dice. No se sube nada.

El registro, según lo que puedes hacer de verdad con un código

filas en el registro
24
se pueden enviar
15
nunca aparecen en el cable
3
reservado, sin significado
1

Escribe el número que te ha dado el cliente, o parte de un significado. Un número que no tiene fila propia se resuelve al rango en el que cae.

CódigoSignificadoEn el cableReferencia
1000Normal Closurese puede enviar[RFC6455]
1001Going Awayse puede enviar[RFC6455]
1002Protocol errorse puede enviar[RFC6455]
1003Unsupported Datase puede enviar[RFC6455]
1004Reservedreservado[RFC6455]
1005No Status Rcvdnunca se envía[RFC6455]
1006Abnormal Closurenunca se envía[RFC6455]
1007Invalid frame payload datase puede enviar[RFC6455]
1008Policy Violationse puede enviar[RFC6455]
1009Message Too Bigse puede enviar[RFC6455]
1010Mandatory Ext.se puede enviar[RFC6455]
1011Internal Errorse puede enviar[RFC6455][RFC Errata 3227]
1012Service Restartse puede enviarregistrado por lista de correo
1013Try Again Laterse puede enviarregistrado por lista de correo
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.se puede enviarregistrado por lista de correo
1015TLS handshakenunca se envía[RFC6455]
1016-2999rangoUnassignedsin asignar
3000Unauthorizedse puede enviar
3001-3002rangoUnassignedsin asignar
3003Forbiddense puede enviar
3004-3007rangoUnassignedsin asignar
3008Timeoutse puede enviar
3009-3999rangoUnassignedsin asignar
4000-4999rangoReserved for Private Usesin asignar[RFC6455]

En el cable

se puede enviar
Un extremo puede poner este código en una trama Close, y si lo has recibido es que el otro lado lo eligió a propósito.
nunca se envía
El RFC 6455 prohíbe ponerlo en una trama Close. Si tu cliente lo informa, ninguna trama Close lo traía: tu biblioteca lo ha inventado en local para describir lo que pasó.
reservado
Registrado pero sin significado definido, y sin la cláusula que prohíbe enviarlo. Nada debería estar usándolo.
sin asignar
Un tramo sin asignaciones, o el rango de uso privado que puedes definir tú.

El 1006 nunca viaja por el cable

Esto es lo que merece la pena saber, y ninguna tabla copiada del registro lo muestra. Tres códigos —1005, 1006 y 1015— llevan en el RFC 6455 una frase que dice que cada uno es un valor reservado que NO DEBE ponerse como código de estado en una trama de control Close. Existen para que una biblioteca tenga algo que informar cuando no hay nada que informar: no llegó ningún código, o la conexión murió sin ninguna trama Close, o el handshake TLS falló antes de que hubiera un WebSocket.

Así que el 1006 no es un mensaje del servidor. Significa que tu cliente nunca recibió una trama Close, y la causa está por debajo del protocolo: una conexión caída, un intermediario que agotó el tiempo, un handshake que nunca se completó. Depurarlo buscando quién envió el 1006 es buscar a alguien que no existe.

Lo que el registro dice y lo que no

IANA publica cinco columnas: el código, su significado, un contacto, una referencia y un responsable de cambios. No hay ninguna columna sobre si un código puede enviarse, así que el 1000 y el 1006 aparecen como filas del mismo tipo y ambos citan el mismo RFC. La distinción solo existe en la prosa de ese RFC, y por eso casi todas las tablas publicadas la pierden.

Tres códigos tienen una procedencia peculiar que vale la pena mostrar en vez de disimular. El 1012, el 1013 y el 1014 —reinicio del servicio, inténtalo más tarde y un error de pasarela que imita el 502 de HTTP— se registraron con un mensaje a una lista de correo y no mediante un documento normativo, y la columna de referencia del registro enlaza a ese mensaje.

Las filas vienen del registro de códigos de cierre de WebSocket de IANA; la clasificación sobre el cable viene de la sección 7.4.1 del RFC 6455, y el generador se niega a construir si ese RFC ya no contiene la frase que atribuye a cada código. No se sube nada.

También disponible en: English · Português · Français · العربية

Códigos de cierre de WebSocket

La lista completa de IANA, con los códigos que el RFC 6455 prohíbe poner en una trama Close marcados como lo que son, incluido el que probablemente te ha traído aquí.

Qué es un código de cierre de WebSocket

Cuando una conexión WebSocket termina de forma limpia, el lado que la cierra envía una trama Close con un número de cuatro dígitos que explica el motivo. El 1000 significa que la conexión terminó con normalidad, el 1001 que el extremo se va, el 1011 que el servidor se encontró con una condición inesperada. Tu biblioteca cliente te muestra ese número, y suele ser la única pista que tienes sobre lo que ha fallado.

Los números los gestiona IANA en un registro de veinticuatro filas: dieciséis códigos individuales en los 1000, unas pocas asignaciones en los 3000 y varios tramos sin asignar o reservados para que los definas tú. Esta página los lista todos, con buscador, y un número sin fila propia se resuelve al tramo en el que cae.

Además marca algo que el registro no puede marcar. Tres de esos códigos no son mensajes en absoluto, y uno de ellos es casi seguro el motivo por el que estás leyendo esto.

Cómo se usa

  1. Escribe el número que te ha dado el cliente. La fila correspondiente sale la primera. Si el número no tiene fila propia —cualquiera de los 2000, o uno de uso privado en los 4000— obtienes el rango que lo cubre en vez de nada.
  2. Lee el estado, no solo el significado. Cada fila dice si el código puede enviarse de verdad. Esa es la columna que te dice si lo eligió el otro lado o se lo inventó tu propia biblioteca.
  3. Busca también por palabras. Escribir parte de un significado funciona —abnormal, policy, restart—, que es más rápido cuando recuerdas a medias la frase pero no el número.

El 1006 no es un mensaje del servidor

Esta es la parte que merece la pena llevarse. Tres códigos —1005, 1006 y 1015— llevan cada uno en el RFC 6455 una frase que dice que son valores reservados que no deben ponerse como código de estado en una trama de control Close. No son cosas que un extremo pueda enviar. Existen para que una biblioteca tenga algo que informar cuando no hay nada que informar.

El 1006 significa que tu cliente nunca recibió ninguna trama Close. Nadie lo eligió y nadie lo envió; la biblioteca lo rellenó para describir una conexión que sencillamente se paró. Así que la causa está por debajo del protocolo: una conexión TCP caída, un proxy o un balanceador que agotó el tiempo del socket, una red que se fue, o un handshake que nunca se completó. Rebuscar en los registros del servidor quién envió el 1006 es buscar a alguien que no existe.

El 1005 es la misma idea un paso más allá: sí llegó una trama Close, pero no traía ningún código de estado, lo cual es legal. Y el 1015 informa de que TLS falló antes de que hubiera WebSocket del que hablar. Los tres son tu propio lado describiendo su situación, con el vocabulario que la especificación apartó justo para eso.

Hay un cuarto estado que es fácil meter en el mismo saco y no debería. El 1004 está reservado con su significado sin definir, y no lleva ninguna cláusula que prohíba enviarlo: es simplemente un número al que nadie ha dado un trabajo. Cuatro estados, pues, donde una tabla copiada del registro muestra dos.

Lo que el registro dice y lo que no

IANA publica cinco columnas por fila: el código de estado, su significado, un contacto, una referencia y un responsable de cambios. No hay ninguna columna sobre si un código puede enviarse, y no hay forma de añadirla sin cambiar el esquema del registro. La distinción vive solo en la prosa de la sección 7.4.1 del RFC 6455.

Por eso tantas tablas publicadas la pierden. El 1000 y el 1006 son filas de la misma forma, con el mismo tipo de significado y la misma referencia al mismo RFC, así que una tabla generada desde el registro las dibuja idénticas. Nada en los datos dice que uno es un mensaje y el otro una ficción local.

Tres códigos tienen una procedencia que vale la pena mostrar en vez de disimular. El 1012, el 1013 y el 1014 —reinicio del servicio, inténtalo más tarde y un error de pasarela que imita deliberadamente el 502 de HTTP— no los definió ningún documento normativo. Se registraron con un mensaje a una lista de correo, y la columna de referencia del registro enlaza a ese mensaje en vez de a un RFC. Funcionan, están ampliamente implementados, y llegaron ahí por un camino distinto al de todo lo que los rodea.

La limitación honesta de una página así es que es una instantánea de un registro que puede ganar filas. Lo que evita que envejezca en silencio es que el generador se niega a construir si el RFC 6455 ya no contiene la frase exacta que atribuye a cada uno de los tres códigos que nunca se envían, así que la clasificación no puede alejarse de su fuente sin que falle la compilación.

¿Por qué es gratis?

La lista entera está en la página, y buscar en ella ocurre en tu navegador. No hay nada que ejecutar en un servidor ni motivo para pedirte una cuenta.

Nada de lo que escribes se sube, se guarda ni se registra. Sueles llegar aquí con un código sacado de un log de producción, y la forma fiable de mantener eso en privado es no recibirlo nunca.