WebSocket - Transferencia de Datos

  • Posted on: 25 October 2022
  • By: ReYDeS

La comunicación sobre un WebSocket es full-duplex, cualquiera de los lados puede iniciar una transferencia de datos. La API WebSocket proporciona los métodos para el navegador reciba datos binarios o de texto.

En el siguiente fragmento de código, el objeto Blob está definido en la API de archivos. Contiene datos inmutables de bytes de propiedad Blob.size. Los datos son arbitrarios pero pueden ser descritos como un tipo MIME particular, con la propiedad Blob.type. Por ejemplo un Blob puede ser imágenes factibles de recuperar al desplazarse por una serie de fotos, transferencias de archivos para clientes de chat, o una plantilla jQuery para actualizar un nodo del DOM.

var ws = new WebSocket();
ws.onmessage = function(msg) {
if(msg.data instanceof Blob) { // alternativamente: ... instanceof
	ArrayBuffer
handleBinaryData(msg.data);
}
else {
handleStringData(msg.data);
}
}

El objeto ArrayBuffer está definido en la ECMAScript 2015 Language Specification. Contiene datos inmutables de bytes representando enteros con/sin signo, o valores de punto flotante de tamaño de bit variante (por ejemplo, entero de 8 bits, punto flotante de 64 bits).

Los datos para mensajes de cadenas siempre están codificados en UTF-8. El navegador debe hacer cumplir esta restricción, por ejemplo no deben aparecer bytes NULL dentro de la cadena.

Los datos son enviados utilizando el método de envío del objeto WebSocket. La API WebSocket pretende los datos ArrayBuffer, Blob y String sean argumentos aceptables para el envío. Sin embargo la compatibilidad con datos no String varía actualmente. Las cadenas de JavaScript son de manera nativa UTF-16; el navegador las codifica hacia UTF-8 para su transferencia.

Anotación: Encriptar siempre las conexiones WebSocket utilizando el esquema wss: //. La naturaleza persistente de las conexiones WebSocket, combinada con su mínima sobrecarga, anula la mayoría de las objeciones relacionadas con el rendimiento para implementar TLS en todas las conexiones.

Fuentes:

https://www.w3.org/TR/FileAPI/
https://262.ecma-international.org/6.0/#sec-typedarray-objects

Sobre el Autor


Alonso Eduardo Caballero Quezada - ReYDeS
Instructor y Consultor Independiente en Ciberseguridad
Correo Electrónico: ReYDeS@gmail.com
Twitter: https://twitter.com/Alonso_ReYDeS
LinkedIn: https://pe.linkedin.com/in/alonsocaballeroquezada/
Facebook: https://www.facebook.com/alonsoreydes
Youtube: https://www.youtube.com/c/AlonsoCaballero


Webinar Informática Forense