stringtranslate.com

WebSocket

WebSocket es un protocolo de comunicación de computadoras que proporciona un canal de comunicación bidireccional simultáneo a través de una única conexión de Protocolo de Control de Transmisión (TCP). El protocolo WebSocket fue estandarizado por la IETF como RFC  6455 en 2011. La especificación actual que permite a las aplicaciones web utilizar este protocolo se conoce como WebSockets . [1] Es un estándar vivo mantenido por el WHATWG y un sucesor de la API WebSocket del W3C . [2]

WebSocket es distinto del protocolo HTTP que se utiliza para servir la mayoría de las páginas web. Aunque son diferentes, el RFC  6455 establece que WebSocket "está diseñado para funcionar en los puertos HTTP 443 y 80, así como para admitir intermediarios y servidores proxy HTTP", lo que lo hace compatible con HTTP. Para lograr la compatibilidad, el protocolo de enlace WebSocket utiliza el encabezado HTTP Upgrade [3] para cambiar del protocolo HTTP al protocolo WebSocket.

El protocolo WebSocket permite la interacción full-duplex entre un navegador web (u otra aplicación cliente ) y un servidor web con una sobrecarga menor que las alternativas half-duplex como el sondeo HTTP , lo que facilita la transferencia de datos en tiempo real desde y hacia el servidor. Esto es posible al proporcionar una forma estandarizada para que el servidor envíe contenido al cliente sin que el cliente lo solicite primero, y al permitir que los mensajes se transmitan de ida y vuelta mientras se mantiene abierta la conexión. De esta manera, puede tener lugar una conversación continua bidireccional entre el cliente y el servidor. Las comunicaciones se realizan normalmente a través del puerto TCP número 443 (o 80 en el caso de conexiones no seguras), lo que es beneficioso para entornos que bloquean las conexiones a Internet no web mediante un cortafuegos . Además, WebSocket permite flujos de mensajes sobre TCP. TCP solo se ocupa de flujos de bytes sin un concepto inherente de mensaje. Se han logrado comunicaciones bidireccionales similares entre navegador y servidor de formas no estandarizadas utilizando tecnologías provisionales como Comet o Adobe Flash Player . [4]

La mayoría de los navegadores admiten el protocolo, incluidos Google Chrome , Firefox , Microsoft Edge , Internet Explorer , Safari y Opera . [5]

La especificación del protocolo WebSocket define ws(WebSocket) y wss(WebSocket Secure) como dos nuevos esquemas de identificadores uniformes de recursos (URI) [6] que se utilizan para conexiones cifradas y no cifradas respectivamente. Aparte del nombre del esquema y el fragmento (es decir, #no se admite), el resto de los componentes URI están definidos para utilizar la sintaxis genérica de URI . [7]

Historia

WebSocket fue mencionado por primera vez como TCPConnection en la especificación HTML5 , como un marcador de posición para una API de socket basada en TCP. [8] En junio de 2008, Michael Carter dirigió una serie de discusiones que dieron como resultado la primera versión del protocolo conocida como WebSocket. [9] Antes de WebSocket, la comunicación full-duplex del puerto 80 era alcanzable usando canales Comet ; sin embargo, la implementación de Comet no es trivial y, debido al protocolo de enlace TCP y la sobrecarga del encabezado HTTP, es ineficiente para mensajes pequeños. El protocolo WebSocket tiene como objetivo resolver estos problemas sin comprometer los supuestos de seguridad de la web. El nombre "WebSocket" fue acuñado por Ian Hickson y Michael Carter poco después a través de la colaboración en la sala de chat de IRC #whatwg, [10] y posteriormente fue creado para su inclusión en la especificación HTML5 por Ian Hickson. En diciembre de 2009, Google Chrome 4 fue el primer navegador en enviar soporte completo para el estándar, con WebSocket habilitado de forma predeterminada. [11] El desarrollo del protocolo WebSocket fue posteriormente trasladado del grupo W3C y WHATWG al IETF en febrero de 2010, y fue creado en dos revisiones por Ian Hickson. [12]

Después de que el protocolo fue enviado y habilitado de forma predeterminada en varios navegadores, el RFC  6455 fue finalizado bajo la dirección de Ian Fette en diciembre de 2011.

RFC  7692 introdujo una extensión de compresión para WebSocket utilizando el algoritmo DEFLATE por mensaje.

Ejemplo de cliente

<!DOCTYPE html> < script > // Conectarse al servidor ws = new WebSocket ( "ws://127.0.0.1/scoreboard" ) // Servidor local // ws = new WebSocket("wss://game.example.com/scoreboard") // Servidor remoto    ws . onopen = () => { console . log ( "Conexión abierta" ) ws . send ( "Hola servidor, por favor envíame el puntaje del juego de ayer" ) }      ws . onmessage = ( event ) => { console . log ( "Datos recibidos" , event . data ) ws . close () // Obtuvimos el puntaje por lo que ya no necesitamos la conexión }        ws . onclose = ( evento ) => { console . log ( "Conexión cerrada" , evento . código , evento . motivo , evento . wasClean ) }        ws . onerror = () => { console . log ( "Conexión cerrada debido a un error" ) } </ script >     

Ejemplo de servidor

desde  socket  importar  socket desde  base64  importar  b64encode desde  hashlib  importar  sha1MAGIA  =  b "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"# Crea un socket y escucha en el puerto 80 ws  =  socket () ws . bind (( "" ,  80 )) ws . listen () conn ,  addr  =  ws . accept ()# Analizar la solicitud de línea en conn.recv(4096 )  .split  (  b " \ r \ n " ) : if line.startswith ( b " Sec - WebSocket -Key" ) : nonce = line.split ( b ":{ ) [ 1 ] { strip ( )     # Formato de respuesta response  =  f """ \ HTTP/1.1 101 Protocolos de conmutación Actualización: websocket Conexión: Actualización Sec-WebSocket-Accept: { b64encode ( sha1 ( nonce + MAGIC ) . digest ()) . decode () }  """conn . enviar ( respuesta . reemplazar ( " \n " ,  " \r\n " ) . codificar ())mientras  True :  # decodifica los mensajes del cliente  header =  conn.recv  ( 2 ) FIN = bool ( header [ 0 ] & 0x80 ) # bit 0 assert FIN == 1 , " Solo admitimos mensajes no fragmentados" opcode = header [ 0 ] & 0xf # bits 4-7 assert opcode == 1 or opcode == 2 , "Solo admitimos mensajes de datos" masked = bool ( header [ 1 ] & 0x80 ) # bit 8 assert masked , "El cliente debe enmascarar todos los marcos" payload_size = header [ 1 ] & 0x7f # bits 9-15 assert payload_size <= 125 , "Solo admitimos mensajes pequeños" masking_key = conn . recv ( 4 ) carga útil = bytearray ( conn . recv ( tamaño_carga_útil )) para i en rango ( tamaño_carga_útil ): carga_útil [ i ] = carga_útil [ i ] ^ clave_enmascaradora [ i % 4 ] print ( carga_útil )                                                                

API web

Una aplicación web (por ejemplo, un navegador web) puede utilizar la WebSocketinterfaz para conectarse a un servidor WebSocket.

Protocolo

Pasos:

  1. Apertura de protocolo de enlace ( solicitud HTTP + respuesta HTTP ) para establecer una conexión.
  2. Mensajes de datos para transferir datos de la aplicación.
  3. Apretón de manos de cierre (dos marcos de cierre) para cerrar la conexión.

Apretón de manos de apertura

El cliente envía una solicitud HTTP ( método GET , versión ≥ 1.1 ) y el servidor devuelve una respuesta HTTP con el código de estado 101 ( Switching Protocols ) en caso de éxito. Esto significa que un servidor WebSocket puede usar el mismo puerto que HTTP (80) y HTTPS (443) porque el protocolo de enlace es compatible con HTTP. [28]

Ejemplo de solicitud: [38]

GET  /chat  HTTP / 1.1 Host :  server.example.com Actualización :  websocket Conexión :  Actualización Clave Sec-WebSocket :  x3JJHMbDL1EzLkh9GBhXDw== Protocolo Sec-WebSocket :  chat, superchat Versión Sec-WebSocket :  13 Origen :  http://example.com

Ejemplo de respuesta:

HTTP / 1.1  101  Protocolos de conmutación Actualización :  Conexión websocket : Actualización Sec-WebSocket-Accept : HSmrc0sMlYUkAGmm5OPpG2HaGWk= Protocolo Sec-WebSocket : chat   

En HTTP, cada línea termina en \r\ny la última línea está vacía.

# Calcular Sec-WebSocket-Accept usando Sec-WebSocket-Key from  base64  import  b64encode from  hashlib  import  sha1 from  os  import  urandom # key = b64encode(urandom(16)) # El cliente debe hacer esto key  =  b "x3JJHMbDL1EzLkh9GBhXDw=="  # Valor en la solicitud de ejemplo anterior magic  =  b "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"  # Constante de protocolo print ( b64encode ( sha1 ( key  +  magic ) . digest ())) # Salida: HSmrc0sMlYUkAGmm5OPpG2HaGWk=

Una vez establecida la conexión, la comunicación cambia a un protocolo basado en trama binaria que no se ajusta al protocolo HTTP.

Sec-WebSocket-Keyy Sec-WebSocket-Accepttienen como objetivo evitar que un proxy de almacenamiento en caché vuelva a enviar una conversación WebSocket anterior, [39] y no proporciona ninguna autenticación, privacidad o integridad.

Aunque algunos servidores aceptan un encabezado Sec-WebSocket-Key corto Sec-WebSocket-Key, muchos servidores modernos rechazarán la solicitud con el error "encabezado Sec-WebSocket-Key no válido".

Mensaje basado en marcos

Después del protocolo de apertura, el cliente y el servidor pueden enviarse mensajes entre sí en cualquier momento, como mensajes de datos (texto o binarios) y mensajes de control (close, ping, pong). Un mensaje se compone de uno o más marcos.

La fragmentación permite dividir un mensaje en dos o más tramas. Permite enviar mensajes con datos iniciales disponibles pero con una longitud total desconocida. Sin fragmentación, el mensaje completo debe enviarse en una trama, por lo que se necesita la longitud completa antes de poder enviar el primer byte, lo que requiere un búfer. [40] También permite multiplexar varios flujos simultáneamente (por ejemplo, para evitar monopolizar un socket para una única carga útil grande ). [41]

Estructura del marco

Códigos de operación

Códigos de estado

Compatibilidad con navegadores

Se implementa una versión segura del protocolo WebSocket en Firefox 6, [54] Safari 6, Google Chrome 14, [55] Opera 12.10 e Internet Explorer 10. [56] Un informe detallado del conjunto de pruebas de protocolo [57] enumera la conformidad de esos navegadores con aspectos específicos del protocolo.

Una versión más antigua y menos segura del protocolo se implementó en Opera 11 y Safari 5, así como en la versión móvil de Safari en iOS 4.2 . [58] El navegador BlackBerry en OS7 implementa WebSockets. [59] Debido a vulnerabilidades, se deshabilitó en Firefox 4 y 5, [60] y Opera 11. [61] Al usar herramientas para desarrolladores de navegadores, los desarrolladores pueden inspeccionar el protocolo de enlace WebSocket, así como los marcos WebSocket. [62]

Implementaciones de servidores

Consideraciones de seguridad

A diferencia de las solicitudes HTTP entre dominios habituales, las solicitudes WebSocket no están restringidas por la política del mismo origen . Por lo tanto, los servidores WebSocket deben validar el encabezado "Origen" con los orígenes esperados durante el establecimiento de la conexión, para evitar ataques de secuestro de WebSocket entre sitios (similares a la falsificación de solicitudes entre sitios ), que podrían ser posibles cuando la conexión se autentica con cookies o autenticación HTTP. Es mejor utilizar tokens o mecanismos de protección similares para autenticar la conexión WebSocket cuando se transfieren datos confidenciales (privados) a través de WebSocket. [78] Un ejemplo vivo de vulnerabilidad se vio en 2020 en forma de Cable Haunt .

Travesía de proxy

Las implementaciones de cliente del protocolo WebSocket intentan detectar si el agente de usuario está configurado para usar un proxy cuando se conecta al host y puerto de destino y, si es así, utiliza el método HTTP CONNECT para configurar un túnel persistente.

Aunque el protocolo WebSocket no tiene en cuenta los servidores proxy ni los cortafuegos, cuenta con un protocolo de enlace compatible con HTTP, lo que permite a los servidores HTTP compartir sus puertos HTTP y HTTPS predeterminados (80 y 443 respectivamente) con una puerta de enlace o servidor WebSocket. El protocolo WebSocket define un prefijo ws:// y wss:// para indicar una conexión WebSocket y una conexión WebSocket Secure respectivamente. Ambos esquemas utilizan un mecanismo de actualización HTTP para actualizar al protocolo WebSocket. Algunos servidores proxy son transparentes y funcionan bien con WebSocket; otros impedirán que WebSocket funcione correctamente, lo que provocará que la conexión falle. En algunos casos, puede ser necesaria una configuración adicional del servidor proxy y puede ser necesario actualizar ciertos servidores proxy para que admitan WebSocket.

Si el tráfico WebSocket no cifrado fluye a través de un servidor proxy explícito o transparente sin soporte de WebSockets, es probable que la conexión falle. [79]

Si se utiliza una conexión WebSocket cifrada, el uso de Transport Layer Security (TLS) en la conexión WebSocket Secure garantiza que HTTP CONNECTse emita un comando cuando el navegador esté configurado para utilizar un servidor proxy explícito. Esto configura un túnel, que proporciona comunicación TCP de extremo a extremo de bajo nivel a través del proxy HTTP, entre el cliente WebSocket Secure y el servidor WebSocket. En el caso de servidores proxy transparentes, el navegador no conoce el servidor proxy, por lo que no HTTP CONNECTse envía ningún comando. Sin embargo, dado que el tráfico por cable está cifrado, los servidores proxy transparentes intermedios pueden simplemente permitir el paso del tráfico cifrado, por lo que hay una mayor probabilidad de que la conexión WebSocket tenga éxito si se utiliza WebSocket Secure. El uso del cifrado no está libre de costos de recursos, pero a menudo proporciona la tasa de éxito más alta, ya que viajaría a través de un túnel seguro.

Un borrador de mediados de 2010 (versión hixie-76) rompió la compatibilidad con servidores proxy inversos y puertas de enlace al incluir ocho bytes de datos clave después de los encabezados, pero sin anunciar esos datos en un Content-Length: 8encabezado. [80] Estos datos no fueron reenviados por todos los intermediarios, lo que podría provocar un fallo del protocolo. Borradores más recientes (por ejemplo, hybi-09 [81] ) colocaron los datos clave en un Sec-WebSocket-Keyencabezado, lo que solucionó este problema.

Véase también

Notas

  1. ^ Las versiones 6 a 10 de los navegadores basados ​​en Gecko implementan el objeto WebSocket como "MozWebSocket", [65] lo que requiere código adicional para integrarse con el código existente habilitado para WebSocket.

Referencias

  1. ^ "Estándar WebSockets". websockets.spec.whatwg.org . Archivado desde el original el 2023-03-12 . Consultado el 2022-05-16 .
  2. ^ "La API de WebSocket". www.w3.org . Archivado desde el original el 8 de junio de 2022 . Consultado el 16 de mayo de 2022 .
  3. ^ Ian Fette; Alexey Melnikov (diciembre de 2011). "Relación con TCP y HTTP". RFC 6455 El protocolo WebSocket. IETF . sec. 1.7. doi : 10.17487/RFC6455 . RFC 6455.
  4. ^ "Plataforma Adobe Flash: sockets". help.adobe.com . Archivado desde el original el 18 de abril de 2021 . Consultado el 28 de julio de 2021 . Las conexiones TCP requieren un "cliente" y un "servidor". Flash Player puede crear sockets de cliente.
  5. ^ "La API WebSocket (WebSockets)". MDN Web Docs . Red de desarrolladores de Mozilla. 2023-04-06. Archivado desde el original el 2021-07-28 . Consultado el 2021-07-26 .
  6. ^ Graham Klyne, ed. (14 de noviembre de 2011). "Esquemas de identificadores uniformes de recursos (URI) de la IANA". Autoridad de Números Asignados en Internet . Archivado desde el original el 25 de abril de 2013. Consultado el 10 de diciembre de 2011 .
  7. ^ Ian Fette; Alexey Melnikov (diciembre de 2011). "URI de WebSocket". RFC 6455 El protocolo WebSocket. IETF . sec. 3. doi : 10.17487/RFC6455 . RFC 6455.
  8. ^ "HTML 5". www.w3.org . Archivado desde el original el 16 de septiembre de 2016 . Consultado el 17 de abril de 2016 .
  9. ^ "[whatwg] Comentarios de Michael Carter sobre TCPConnection el 18 de junio de 2008 (whatwg.org de junio de 2008)". lists.w3.org . Archivado desde el original el 27 de abril de 2016 . Consultado el 17 de abril de 2016 .
  10. ^ "Registros de IRC: freenode/#whatwg/20080618". krijnhoetmer.nl . Archivado desde el original el 21 de agosto de 2016. Consultado el 18 de abril de 2016 .
  11. ^ "Web Sockets ya está disponible en Google Chrome". Blog de Chromium . Archivado desde el original el 2021-12-09 . Consultado el 2016-04-17 .
  12. ^ <[email protected]>, Ian Hickson (6 de mayo de 2010). "El protocolo WebSocket". Ietf Datatracker . Archivado desde el original el 2017-03-17 . Consultado el 2016-04-17 .
  13. ^ "Definición de interfaz". WHATWG . Archivado desde el original el 2023-03-12 . Consultado el 2024-04-10 .
  14. ^ "new WebSocket(url, protocols)". WHATWG . Archivado desde el original el 2023-03-12 . Consultado el 2024-04-30 .
  15. ^ "close(código, motivo)". WHATWG . Archivado desde el original el 2023-03-12 . Consultado el 2024-04-10 .
  16. ^ "Cuando se ha recibido un mensaje WebSocket". WHATWG . Archivado desde el original el 2023-03-12 . Consultado el 2024-04-13 .
  17. ^ ab "Cuando se cierra la conexión WebSocket; subpaso 3". WHATWG . Archivado desde el original el 2023-03-12 . Consultado el 2024-04-13 .
  18. ^ ab La conexión WebSocket está cerrada. sec. 7.1.4. doi : 10.17487/RFC6455 . RFC 6455.
  19. ^ Código de cierre de conexión WebSocket. sec. 7.1.5. doi : 10.17487/RFC6455 . RFC 6455.
  20. ^ Motivo del cierre de la conexión WebSocket. sec. 7.1.6. doi : 10.17487/RFC6455 . RFC 6455.
  21. ^ "CONECTANDO". WHATWG . Archivado desde el original el 2023-03-12 . Consultado el 2024-04-13 .
  22. ^ Requisitos del cliente. pág. 14. sec. 4.1. doi : 10.17487/RFC6455 . RFC 6455.
  23. ^ "ABIERTO". WHATWG . Archivado desde el original el 2023-03-12 . Consultado el 2024-04-10 .
  24. ^ _Se establece la conexión WebSocket_. p. 20. doi : 10.17487/RFC6455 . RFC 6455.
  25. ^ "CIERRE". WHATWG . Archivado desde el original el 2023-03-12 . Consultado el 2024-04-10 .
  26. ^ Se inicia el protocolo de enlace de cierre de WebSocket. sec. 7.1.3. doi : 10.17487/RFC6455 . RFC 6455.
  27. ^ "CERRADO". WHATWG . Archivado desde el original el 2023-03-12 . Consultado el 2024-04-10 .
  28. ^ Apretón de manos de apertura. sec. 1.3. doi : 10.17487/RFC6455 . RFC 6455.
  29. ^ Requisito del cliente 8. p. 18. doi : 10.17487/RFC6455 . RFC 6455.
  30. ^ Requisito del cliente 9. p. 18. doi : 10.17487/RFC6455 . RFC 6455.
  31. ^ Requisito del cliente 7. p. 18. doi : 10.17487/RFC6455 . RFC 6455.
  32. ^ Paso del servidor 5.4. p. 24. doi : 10.17487/RFC6455 . RFC 6455.
  33. ^ Requisito del cliente 6. p. 18. doi : 10.17487/RFC6455 . RFC 6455.
  34. ^ Paso del servidor 5.3. p. 24. doi : 10.17487/RFC6455 . RFC 6455.
  35. ^ Requisito del cliente 5. p. 17. doi : 10.17487/RFC6455 . RFC 6455.
  36. ^ Paso del servidor 5.2. p. 24. doi : 10.17487/RFC6455 . RFC 6455.
  37. ^ Requisito del cliente 10. p. 18. doi : 10.17487/RFC6455 . RFC 6455.
  38. ^ Descripción general del protocolo. sec. 1.2. doi : 10.17487/RFC6455 . RFC 6455.
  39. ^ "Objetivo principal del protocolo WebSocket". IETF. Archivado desde el original el 22 de abril de 2016. Consultado el 25 de julio de 2015. El cálculo [...] tiene como objetivo evitar que un intermediario de almacenamiento en caché proporcione a un cliente WS una respuesta de un servidor WS almacenada en caché sin interacción real con el servidor WS.
  40. ^ Fragmentación. sec. 5.4. doi : 10.17487/RFC6455 . RFC 6455.
  41. ^ John A. Tamplin; Takeshi Yoshino (2013). Una extensión de multiplexación para WebSockets. IETF . ID draft-ietf-hybi-websocket-multiplexing.
  42. ^ FIN. pág. 28. doi : 10.17487/RFC6455 . RFC 6455.
  43. ^ RSV1, RSV2, RSV3. pág. 28. doi : 10.17487/RFC6455 . RFC 6455.
  44. ^ Máscara. pág. 29. doi : 10.17487/RFC6455 . RFC 6455.
  45. ^ Longitud de carga útil. p. 29. doi : 10.17487/RFC6455 . RFC 6455.
  46. ^ Descripción general. sec. 5.1. doi : 10.17487/RFC6455 . RFC 6455.
  47. ^ Enmascaramiento de cliente a servidor. sec. 5.3. doi : 10.17487/RFC6455 . RFC 6455.
  48. ^ Protocolo de cierre. sec. 1.4. doi : 10.17487/RFC6455 . RFC 6455.
  49. ^ Cerrar. sec. 5.5.1. doi : 10.17487/RFC6455 . RFC 6455.
  50. ^ Ping. sec. 5.5.2. doi : 10.17487/RFC6455 . RFC 6455.
  51. ^ Pong. sección 5.5.3. doi : 10.17487/RFC6455 . RFC 6455.
  52. ^ Rangos de códigos de estado reservados. sec. 7.4.2. doi : 10.17487/RFC6455 . RFC 6455.
  53. ^ Códigos de estado definidos. sec. 7.4.1. doi : 10.17487/RFC6455 . RFC 6455.
  54. ^ Dirkjan Ochtman (27 de mayo de 2011). «WebSocket habilitado en Firefox 6». Mozilla.org . Archivado desde el original el 26 de mayo de 2012. Consultado el 30 de junio de 2011 .
  55. ^ "Estado de la plataforma web Chromium". Archivado desde el original el 4 de marzo de 2017. Consultado el 3 de agosto de 2011 .
  56. ^ "WebSockets (Windows)". Microsoft. 28 de septiembre de 2012. Archivado desde el original el 25 de marzo de 2015. Consultado el 7 de noviembre de 2012 .
  57. ^ "Informe de prueba del protocolo WebSockets". Tavendo.de. 27 de octubre de 2011. Archivado desde el original el 22 de septiembre de 2016. Consultado el 10 de diciembre de 2011 .
  58. ^ Katie Marsal (23 de noviembre de 2010). «Apple añade compatibilidad con acelerómetro y WebSockets a Safari en iOS 4.2». AppleInsider.com . Archivado desde el original el 1 de marzo de 2011. Consultado el 9 de mayo de 2011 .
  59. ^ "Web Sockets API". BlackBerry . Archivado desde el original el 10 de junio de 2011 . Consultado el 8 de julio de 2011 .
  60. ^ Chris Heilmann (8 de diciembre de 2010). «WebSocket deshabilitado en Firefox 4». Hacks.Mozilla.org . Archivado desde el original el 6 de marzo de 2017. Consultado el 9 de mayo de 2011 .
  61. ^ Aleksander Aas (10 de diciembre de 2010). "Respecto a WebSocket". Mi blog de Opera . Archivado desde el original el 15 de diciembre de 2010. Consultado el 9 de mayo de 2011 .
  62. ^ Wang, Vanessa; Salim, Frank; Moskovits, Peter (febrero de 2013). "APÉNDICE A: Inspección de marcos de WebSocket con las herramientas para desarrolladores de Google Chrome". La guía definitiva para WebSocket en HTML5 . Apress. ISBN 978-1-4302-4740-1Archivado desde el original el 31 de diciembre de 2015 . Consultado el 7 de abril de 2013 .
  63. ^ "WebSockets (soporte en Firefox)". developer.mozilla.org . Mozilla Foundation. 2011-09-30. Archivado desde el original el 2012-05-26 . Consultado el 2011-12-10 .
  64. ^ "Error 640003 - WebSockets - actualización a ietf-06". Fundación Mozilla. 8 de marzo de 2011. Archivado desde el original el 1 de abril de 2021. Consultado el 10 de diciembre de 2011 .
  65. ^ "WebSockets - MDN". developer.mozilla.org . Fundación Mozilla. 2011-09-30. Archivado desde el original el 2012-05-26 . Consultado el 2011-12-10 .
  66. ^ "Error 640003 - WebSockets - actualización a ietf-07(comentario 91)". Fundación Mozilla. 22 de julio de 2011. Archivado desde el original el 1 de abril de 2021. Consultado el 28 de julio de 2011 .
  67. ^ "Error de Chromium 64470". code.google.com . 2010-11-25. Archivado desde el original el 2015-12-31 . Consultado el 2011-12-10 .
  68. ^ "WebSockets en Windows Consumer Preview". Equipo de ingeniería de IE . Microsoft. 19 de marzo de 2012. Archivado desde el original el 6 de septiembre de 2015. Consultado el 23 de julio de 2012 .
  69. ^ "WebKit Changeset 97247: WebSocket: actualización del protocolo WebSocket a hybi-17". trac.webkit.org . Archivado desde el original el 2012-01-05 . Consultado el 2011-12-10 .
  70. ^ "Una instantánea de Opera 12.50 para el verano". Noticias para desarrolladores de Opera. 2012-08-03. Archivado desde el original el 2012-08-05 . Consultado el 2012-08-03 .
  71. ^ "¡Bienvenido a nginx!". nginx.org . Archivado desde el original el 17 de julio de 2012. Consultado el 3 de febrero de 2022 .
  72. ^ "Uso de NGINX como proxy WebSocket". NGINX . 17 de mayo de 2014. Archivado desde el original el 6 de octubre de 2019 . Consultado el 3 de noviembre de 2019 .
  73. ^ "Descripción general de las nuevas características de Apache HTTP Server 2.4". Apache . Archivado desde el original el 11 de noviembre de 2020 . Consultado el 26 de enero de 2021 .
  74. ^ "Registro de cambios de Apache 2.4". Apache Lounge . Archivado desde el original el 22 de enero de 2021 . Consultado el 26 de enero de 2021 .
  75. ^ "Compatibilidad con el protocolo WebSocket de IIS 8.0". Microsoft Docs . 28 de noviembre de 2012. Archivado desde el original el 18 de febrero de 2020. Consultado el 18 de febrero de 2020 .
  76. ^ "Release-1 4 46 - Lighttpd - lighty labs". Archivado desde el original el 16 de enero de 2021. Consultado el 29 de diciembre de 2020 .
  77. ^ "Release-1 4 65 - Lighttpd - lighty labs". Archivado desde el original el 2024-05-03 . Consultado el 2024-05-03 .
  78. ^ Christian Schneider (31 de agosto de 2013). «Secuestro de WebSocket entre sitios (CSWSH)». Blog de seguridad de aplicaciones web . Archivado desde el original el 31 de diciembre de 2016. Consultado el 30 de diciembre de 2015 .
  79. ^ Peter Lubbers (16 de marzo de 2010). "Cómo interactúan los Web Sockets HTML5 con los servidores proxy". Infoq.com . C4Media Inc. Archivado desde el original el 8 de mayo de 2016. Consultado el 10 de diciembre de 2011 .
  80. ^ Willy Tarreau (6 de julio de 2010). "WebSocket -76 es incompatible con los proxies inversos HTTP". ietf.org (correo electrónico). Grupo de trabajo de ingeniería de Internet. Archivado desde el original el 17 de septiembre de 2016. Consultado el 10 de diciembre de 2011 .
  81. ^ Ian Fette (13 de junio de 2011). "Sec-WebSocket-Key". El protocolo WebSocket, borrador hybi-09. sec. 11.4 . Consultado el 15 de junio de 2011 .Archivado el 1 de febrero de 2016 en Wayback Machine.

Enlaces externos