Anar al contingut

WebSocket

De L'Enciclopèdia, la wikipedia en valencià

WebSocket és una tecnologia que proporciona un canal de comunicació bidireccional i full-duplex sobre un únic socket TCP. Està dissenyada per a ser implementada en navegadors i servidors web, pero pot utilisar-se per qualsevol aplicació client/servidor. La API de WebSocket està sent normalisada pel W3C, mentres que el protocol WebSocket ya va ser normalisat per l'IETF com el RFC 6455. Degut a que les conexions TCP comunes sobre ports diferents al 80 són habitualment bloquejades pels administradors de rets, l'us d'esta tecnologia proporcionaria una solució a este tipo de llimitacions proveint una funcionalitat similar a l'obertura de vàries conexions en distints ports, pero multiplexando diferents servicis WebSocket sobre un únic port TCP (a costa d'una chicoteta sobrecàrrega del protocol).

En el costat del client, WebSocket està ya implementat en Mozilla Firefox 8, Google Chrome 4 i Safari 5, aixina com la versió mòvil de Safari en l'iOS 4.2,[1] i en Internet Explorer 10.[2]

Negociació del protocol WebSocket

Per a establir una conexió WebSocket, el client envia una petició de negociació WebSocket, i el servidor envia una resposta de negociació WebSocket, com es pot vore en el següent eixemple:

Petició del navegador al servidor:

Resposta del servidor:

Els 8 bytes en valors numèrics que acompanyen als camps Sec-WebSocket-Key1 i Sec-WebSocket-Key2 són tokens aleatoris que el servidor utilisarà per a construir un token de 16 bytes al final de la negociació per a confirmar que ha llegit correctament la petició de negociació del client.

La negociació o handshake es construïx concatenant els números que acompanyen al primer camp, i dividint-ho pel número d'espais en blanc en el propi camp. Açò mateixa es repetix per al segon camp. Els dos números resultants es concatenen entre sí i en els 8 bytes que van despuix dels camps. El resultat final és una suma MD5 de la cadena concatenada.[3]

Esta negociació pot semblar-se a la negociació HTTP, pero no és aixina. Permet al servidor interpretar part de la petició de negociació com a HTTP i llavors canviar a WebSocket.

Una volta establida, les trames WebSocket de senyes poden escomençar a enviar-se en abdós sentits entre el client i el servidor en modo full-duplex. Les trames de text poden ser enviades en modo full-duplex també, en abdós direccions al mateix temps. L'informació se segmenta en trames d'únicament 2 bytes. Cada trama escomença en un byte 0x00, termina en un byte 0xFF, i conté senyes UTF-8 entre ells. Trames de senyes binarios no estan soportades encara en l'API. Les trames WebSocket de text utilisen un terminador, mentres que les trames binarias utilisen un prefix de llongitut.

Pas a través de servidors proxy

L'implementació de client del protocol WebSocket intenta detectar si l'agent d'usuari està configurat per a utilisar un proxy a l'hora de conectar a un host i port remot, i si és aixina, utilisa el método HTTP CONNECT per a establir un túnel persistent.

Encara que el protocol WebSocket és indiferent a la conexió sobre servidors proxy o tallafocs, implementa una negociació compatible en HTTP per a que els servidors HTTP puguen compartir els seus ports HTTP i HTTPS per defecte (80 i 443) en una passarela o servidor WebSocket. El protocol WebSocket definix un prefix ws:// i wss:// per a indicar una conexió WebSocket i Websocket Secure, respectivament. Abdós esquemes utilisen un mecanisme HTTP upgrade per a actualisar al protocol WebSocket. Alguns servidors proxy no interferixen en la conexió i funcionen perfectament en WebSocket; uns atres afecten al correcte funcionament de WebSocket, provocant que la conexió falle. En alguns casos pot ser que es requerixca configuració adicional en el servidor proxy, i alguns servidors proxy pot ser que necessiten actualisar-se per a soportar WebSocket.

Si el tràfic sense sifrar de WebSocket passa per un proxy explícit o transparent en el seu camí al servidor WebSocket, llavors, independentment de que el proxy es comporte com deguera, esta conexió, a dia d'hui, molt provablement fallarà (a mida que WebSocket s'estenga, els servidors proxy ho tindran en conte). D'ahí que les conexions sense sifrar de WebSocket es deurien utilisar només en les topología més senzilles. [4]

Si s'utilisa una conexió WebSocket sifrada, es necessitarà utilisar una capa TLS en la conexió Websocket Secure per a assegurar que un comando HTTP CONNECT es mana quan el navegador està configurat per a utilisar un servidor proxy explícitament. Açò establix un túnel, que proporciona una comunicació TCP de baix nivell i punt a punt a través del proxy HTTP, entre el client WebSocket Secure i el servidor Websocket. En el cas de servidors proxy trasparentes, el navegador no serà conscient de l'us d'un servidor proxy, aixina que no manarà una petició HTTP CONNECT. En qualsevol cas, com el tràfic està sifrat, els servidors proxy trasparentes intermijos podrien simplement permetre el tràfic sifrat a través d'ells, de manera que la conexió WebSocket funcionarà sense problemes si s'utilisa WebSocket Secure. Utilisar sifrat no és debades en lo que a consum de recursos es referix, pero nos assegura la taxa d'èxit més alta.

Desafortunadament, una actualisació recent al borrador (versió 76) va trencar completament la compatibilitat en proxies inversos i passareles, ya que els 8 bytes de senyes que el client deu enviar despuix de les capçaleres no s'anuncien en una capçalera Content-Length, per lo que els intermediaris no reenvían les senyes fins que es completa la negociació. I com la negociació necessita d'eixos 8 bytes per a completar-se, esta mai es completa i entra en un punt mort. En l'estat actual de les coses, no és recomanable modificar estos components intermediaris per a que soporten este comportament HTTP no estàndar, perque fer-ho llevería a estos components a ser vulnerables a atacs HTTP smuggling, ya que un atacant simplement tindria que fer un intent d'actualisació al protocol WebSocket en una petició per a ser capaç de manar més senyes dels que el servidor HTTP de destí poguera parsear, botant-se aixina alguns filtres de seguritat obligatoris. No se sap si esta problemàtica se solucionarà en un nou borrador o no.[5]

Esquema d'URL

L'especificació del protocol WebSocket definix dos nous esquemes d'URI, ws: i wss:,[6] per a conexions no sifrades i sifrades respectivament. Ademés del nom de l'esquema, el restant de components del URI es definixen en la sintaxis genèrica d'URI.

Un websocket deu estar ben configurat per a evitar que els atacants es facen passar per usuaris legitimos, degut a que esta interacció en el servidor manté oberta la comunicació.[7]

S'ha implementat una versió segura del protocol de WebSocket en Firefox 6,[8] Safari 6, Google Chrome 14,[9] Opera 12.10 i Internet Explorer 10.[10] El reporte[11] mostra la conformitat d'estos navegadors en els aspectes específics del protocol.

Una versió més antiga pero més insegura va ser implementada en Opera 11 i Safari 5, ademés d'en la versió mòvil de Safari en iOS 4.2.[12] BlackBerry Browser en VOS7 implementa també WebSockets.[13] Per les seues vulnerabilitats, ha segut deshabilitado en Firefox 4 i 5,[14] i Opera 11.[15]

Existix el comando per a Google Chrome que habilita una versió prèvia experimental de WebSocket sobre SPDY.[16]

Estat d'implementació
Protocol Data versió preliminar Internet Explorer Firefox[17] (PC) Firefox (Android) Chrome (PC, Mobile) Safari (Mac, iOS) Opera (PC, Mòvil) Android Browser
hixie-75 4 de febrer de 2010 4 5.0.0
hixie-76
hybi-00
6 de maig de 2010
23 de maig de 2010
4.0 (disabled) 6 5.0.1 11.00 (disabled)
7 hybi-07 22 d'abril de 2011 6[18]
8 hybi-10 11 de juliol de 2011 7[19] 7 14[20]
13 RFC 6645 December, 2011 10[21] 11 11 16[22] 6 12.10[23] 4.4

Vore també

Referències

  1. ↑ Erro en la cita: L'element <ref> no és vàlit; puix no n'hi ha una referència en text nomenada Katie Marsal, AppleInsider, 2010
  2. ↑ «WebSockets (Windows)». Microsoft. Consultat el 3 d'octubre de 2014.
  3. ↑ http://www.whatwg.org/specs/web-socket-protocol/
  4. ↑ How Web Sockets Interact With Proxy Servers
  5. ↑ WebSocket -76 és incompatible en proxies HTTP inversos
  6. ↑ IANA Uniform Resource Identifer (URI) Schemes
  7. ↑ http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol
  8. ↑ Dirkjan Ochtman. «WebSocket enabled in Firefox 6». Mozilla. org. Archivat des d'el original, el 26 de maig de 2012. Consultat el 30 de juny de 2011.
  9. ↑ «Chromium Web Platform Status». Consultat el 3 d'agost de 2011.
  10. ↑ «WebSockets (Windows)». Microsoft (28 de setembre de 2012). Consultat el 7 de novembre de 2012.
  11. ↑ «WebSockets Protocol Test Report». Tavendo. de. Archivat des d'el original, el 19 d'abril de 2012. Consultat el 10 de decembre de 2011.
  12. ↑ Katie Marsal. «Apple adds accelerometer, WebSockets support to Safari in iOS 4.2». AppleInsider. com. Consultat el 9 de maig de 2011.
  13. ↑ «archive. org/web/20110610191150/http://docs. blackberry. com/en/developers/deliverables/29271/Web_Sockets_support_1582781_11. jsp Web Sockets API». BlackBerry. Archivat des d'el original, el 10 de juny de 2011. Consultat el 8 de juliol de 2011.
  14. ↑ Chris Heilmann. «WebSocket disabled in Firefox 4». Hacks. Mozilla. org. Consultat el 9 de maig de 2011.
  15. ↑ Aleksander Aas. «archive. org/web/20101215010748/http://my. opera. com/chooseopera/blog/2010/12/10/regarding-websocket Regarding WebSocket». My Opera Blog. Archivat des d'el original, el 15 de decembre de 2010. Consultat el 9 de maig de 2011.
  16. ↑ Peter Beverloo. «List of Chromium Command Line Switches». Consultat el 10 de decembre de 2011.
  17. ↑ «WebSockets (support in Firefox)». Mozilla Foundation. Archivat des d'el original, el 26 de maig de 2012. Consultat el 10 de decembre de 2011.
  18. ↑ «Bug 640003 - WebSockets - upgrade to ietf-06». Mozilla Foundation. Consultat el 10 de decembre de 2011.
  19. ↑ «Bug 640003 - WebSockets - upgrade to ietf-07(comment 91)». Mozilla Foundation.
  20. ↑ «Chromium bug 64470». Google (25 de novembre de 2010). Consultat el 10 de decembre de 2011.
  21. ↑ «WebSockets in Windows Consumer Preview». IE Engineering Team. Microsoft. Consultat el 23 de juliol de 2012.
  22. ↑ «WebKit Changeset 97247: WebSocket: Update WebSocket protocol to hybi-17». Consultat el 10 de decembre de 2011.
  23. ↑ «archive. org/web/20120805234006/http://my. opera. com/ODIN/blog/2012/08/03/a-hot-opera-12-50-summer-time-snapshot A hot Opera 12.50 summer-clave snapshot». Opera Developer News. Archivat des d'el original, el 5 d'agost de 2012. Consultat el 3 d'agost de 2012.

Enllaços externs