2012-02-11 9 views
15

Esiste un riepilogo della differenza di protocollo tra tra le varie bozze di WebSockets?Quali sono le differenze di protocollo tra le versioni di WebSockets?

I livelli di supporto del browser sono ancora dappertutto, quindi non è sufficiente prendere in considerazione l'RFC.

Ovviamente la versione di Sec-WebSocket cambia, e so che il formato iniziale era abbastanza radicalmente diverso. Tuttavia, intendo i cambiamenti più sottili nel protocollo. Ad esempio, hybi-10 (v8), nel framing, suggerisce che la lunghezza estesa del payload è memorizzata come 16/63, anziché 16/64 in RFC 6455 (v13).

Quindi: c'è un riepilogo delle modifiche da qualche parte?

In alternativa (se ignoriamo le bozze iniziali e i numeri di versione), il protocollo è essenzialmente lo stesso e le bozze sono principalmente correzioni al testo delle specifiche?

risposta

19

La Wikipedia WebSocket elenca quali browser supportano il protocollo.

Inoltre, IETF fornisce uno strumento diff che può essere utilizzato per confrontare due specifiche di progetto RFC. Ad esempio, per confrontare WebSocket progetto 15 e 17 andate qui:

Regolare l'url1 e URL2 indirizzi per ottenere un diff per le versioni arbitrarie. Nota che questo ti mostrerà differenze testuali con le specifiche e grandi cambiamenti alle specifiche spesso si verificano senza corrispondenti differenze sul filo. Suggerisco di cercare i diff per la sezione "Protocol Overview" e la sezione "Base Framing Protocol" che mostrano rispettivamente il sommario dell'intestazione e il diagramma di framing.

La più grande differenza nel protocollo filo si è verificata tra Hixie-76/HyBi-00 (HyBi-00 era solo una copia di Hixie-76 per l'avvio della nuova serie) e il resto della serie HyBi che inizia con HyBi-04 (HyBi-17 è diventato IETF RFC 6455). Alcuni dei principali cambiamenti rispetto alla serie Hixie alla serie HyBi:

  • Nel protocollo Hixie-76, c'è stata una stretta di mano hash peculiare che è accaduto dopo le intestazioni stretta di mano, ma prima che i frame di dati effettivi.
  • In Hixie-76, i frame avevano il prefisso 0x00 e il suffisso con 0xff. Non c'era modo di determinare la lunghezza del frame, tranne che ricevere/buffering fino alla fine del frame. Nella serie HyBi (dopo HyBi-00) la lunghezza del frame è parte del prefisso/header e non c'è suffisso.
  • La serie HyBi supporta sia il testo UTF-8 sia i dati binari nel payload (Hixie supporta solo UTF-8). Questo è indicato da e opcode nell'intestazione del frame.
+1

Ok, lo strumento di confronto delle specifiche è il vero vincitore qui - mi consente di avere fiducia. Saluti. Ero ben consapevole del molto diverso 00; erano le differenze minori tra le bozze successive che volevo controllare. –

+0

Trovato un cambiamento interessante, re l'intestazione di origine; più dettaglio nella mia risposta –

2

Non sono a conoscenza di molte delle versioni del protocollo attualmente in uso. Ho un server websocket che supporta Hixie-76 e hybi-10 a 17 (solo modifiche in Sec-WebSocket-Version) che funziona contro Safari (desktop + iOS), Firefox e Chrome.

(Il più vecchio) Hixie-76 è utile per parlare almeno con dispositivi iOS.

hybi-10 in poi sono essenzialmente uguali. Avevo ipotizzato che il tuo esempio di payload esteso pubblicizzato come 63 bit in hybi-10 fosse un refuso ed era una delle tante piccole correzioni apportate quando le bozze si spostavano rapidamente da 10 a 17.

Successivamente: modificato in mostra che alcune versioni di Safari effettivamente utilizzano Hixie-76

+0

Questa era la mia conclusione anche; usare 63 significherebbe che tutto aveva un allineamento imbarazzante, il che sarebbe insano. Freddo; Proverò la mimica della versione da 10 a 17 e aggiungerò il supporto esplicito hybi-00. Grazie. –

+0

In realtà, c'è un cambiamento - vedi la mia risposta –

+0

Ah, mi dispiace per quello. Mi è mancato perché il mio (semplice) server websocket non utilizza l'intestazione di origine. – simonc

4

Per aggiungere una modifica specifica; in Sec-WebSocketVersion < = 8, l'origine è Sec-WebSocket-Origin; tuttavia, in 13 questo cambia nell'intestazione Origin. Questo cambia in particolare between hybi-10 and hybi-11, che sono entrambe implementazioni di versione "8". Si noti inoltre che è Origin in hixie-76/hybi-00, quindi sembra che sia passato da Origin a Sec-WebSocket-Origin e quindi di nuovo a Origin.