2012-05-04 30 views
6

Ho un client/server WebSocket che funziona perfettamente con Firefox e Chrome 18. Non funziona con Chrome 19 beta. Sospetto che sia dovuto a questo browser che ora utilizza un'estensione deflate-frame che il mio server non supporta.Impossibile ottenere la connessione websocket per funzionare in Chrome 19

Chrome 19 beta sta inviando questo nella sua stretta di mano: "Sec-WebSocket-Extensions: x-webkit-sgonfiare-frame"

ho il mio server di invio di nuovo: "SEC-websocket-Estensioni:"

Ma questo non è il modo corretto di rifiutare l'estensione o c'è qualcos'altro che non sto prendendo. Questa è l'unica cosa nella stretta di mano che è diversa da ciò che vedo provenire dai browser funzionanti.

Modifica: Ecco alcune informazioni aggiuntive. Queste sono le strette di mano catturate da Wireshark.


La stretta di mano con Firefox 12:

GET/chatserver HTTP/1.1
Host: (omesso per questo post)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv : 12.0) Gecko/20.100.101 Firefox/12.0
Accept: text/html, application/xhtml + xml, application/xml; q = 0,9, /; q = 0,8
Accept-Language: it-it, it; q = 0.5
Accept-Encoding: gzip, d eflate
DNT: 1
Connection: keep-alive, aggiornamento
Sec-WebSocket-Versione: 13
origine: (omesso per questo post)
Sec-WebSocket-Key: 2TKm4ozUQdNP17Lobt7IBg ==
Pragma: no -cache
cache-Control: no-cache
aggiornamento: websocket

HTTP/1.1 101 protocolli di commutazione
aggiornamento: websocket
Connecti on: Aggiornamento
Sec-WebSocket-Accept: pSUB3BT9YUUd9n3mOeWY/1uVqJE =


La stretta di mano con Chrome 18:

GET/chatserver HTTP/1.1
Aggiornamento: websocket
collegamento: Aggiornamento
Host: (omesso per questo post)
Origine: (omessa per questo post)
Sec-WebSocket-Key: zuHLEC8pGvAMadarhCLXFA ==
Sec-WebSocket-Version: 13

HTTP/1.1 101 Protocolli di commutazione
Aggiornamento: websocket
Connection: Amplia
Sec-WebSocket-Accept: LMBSq6Bk9Kiv + zAbQlAL899pfzc =


La stretta di mano con Chrome 19:

GET/chatserver HTTP/1.1
Upgrade: websocket
Connessione: Upgrade
Host: (omesso per questo post)
Origine: (omesso per questo post)
Sec-WebSocket-Key: TbwnVcuUiqGgZn7hxvxzvQ ==
Sec-WebSocket-Versione: 13
Sec-websocket-Estensioni: x-webkit-sgonfiare-frame

HTTP/1.1 101 protocolli di commutazione
aggiornamento: websocket
collegamento: aggiornamento
Sec-WebSocket-Accept: D45BJ + Vfydy1Upcs3Hze/nuiaS8 =
sec-websocket-estensioni:


Tutte le risposte del server hanno terminazioni di riga e includono un \ r \ n extra alla fine del messaggio.

FF12 e Chrome18 funzionano - Chrome19 non funziona. In Chrome19, il pacchetto successivo alla risposta di handshake del server è FIN/ACK. La connessione è chiusa.

nb. Ho anche provato a utilizzare un trattino come valore Sec-WebSocket-Extensions ma non ha funzionato neanche.

risposta

4

Trovato il problema.

In primo luogo, la voce vuota Sec-WebSocket-Extensions nella risposta del server stava producendo un errore "Invalid UTF-8 sequence in header value". Dopo aver rimosso quella voce, l'errore rimanente era "A server must not mask any frames that it sends to the client."

Infatti, l'implementazione del mio server (una versione altamente modificata di PHPWebSocket) ha come valore predefinito il mascheramento dei frame che invia. La modifica di questo comportamento predefinito ha risolto il problema e la connessione websocket ora funziona in Chrome 19.

Aggiunta del tag PHPWebSocket a questa domanda poiché si tratta di un problema con quel progetto.

+0

Ciao Aaron, Per favore, puoi indicarmi dove e cosa cambiare? Ho esattamente lo stesso problema, sto usando lo stesso PHP-Websocket e improvvisamente ha smesso di funzionare con l'ultima versione di Chrome. –

+0

@ClintonGreen: cerca la funzione di invio in Connection.php. Vedrai negli argomenti che $ masked è impostato su true. Questo argomento deve essere falso perché invii a funzionare correttamente in Chrome 19+. Scusa per il ritardo della risposta. – Aaron

+0

grazie mille. Ci provo. Saluti –

0

Per Chrome, l'intestazione "Sec-WebSocket-Protocol" deve avere valore sia per lato server che client. Questo è il caso per me.

Problemi correlati