2012-05-04 882 views
6

Tengo un cliente/servidor websocket que funciona perfectamente con Firefox y Chrome 18. No funciona con Chrome 19 beta. Sospecho que es debido a que este navegador ahora usa una extensión de marco desinflado que mi servidor no admite.No se puede conectar la websocket a Chrome 19

Chrome 19 beta está enviando esta en su apretón de manos: "Sec-WebSocket-Extensiones: x-webkit-desinflado-marco"

tengo mi servidor de envío de vuelta: "SEC-WebSocket-Extensiones:"

Pero esta no es la manera correcta de rechazar la extensión o hay algo más que no estoy atrapando. Esto es lo único en el apretón de manos que es diferente de lo que veo proveniente de los navegadores de trabajo.

Editar: Aquí hay más información. Estos son los apretones de manos según lo capturado por Wireshark.


El apretón de manos usando Firefox 12:

GET/Chatserver HTTP/1.1
Anfitrión: (omitido para este post)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv : 12,0) Gecko/20100101 Firefox/12.0
Accept: text/html, application/xhtml + xml, application/xml; q = 0,9, /; q = 0,8
Accept-Language: es-es, en; q = 0.5
Aceptar codificación: gzip, d eflate
DNT: 1
conexion: keep-alive, Asciende
Sec-WebSocket-Versión: 13
Origen: (omitido para este post)
Sec-WebSocket-Key: 2TKm4ozUQdNP17Lobt7IBg ==
Pragma: no -cache
Cache-control: no-cache
de actualización: WebSocket

HTTP/1.1 101 Protocolos de conmutación
Upgrade: WebSocket
Connecti en: Actualizar
Sec-WebSocket-Accept: pSUB3BT9YUUd9n3mOeWY/1uVqJE =


El apretón de manos usando Chrome 18:

GET/Chatserver HTTP/1.1
Upgrade: WebSocket
Conexión: Actualizar
Host: (se omite en esta publicación)
Origen: (se omite en esta publicación)
Sec-WebSocket-Key: zuHLEC8pGvAMadarhCLXFA ==
Sec-WebSocket-Version: 13

HTTP/1.1 101 Protocolos de conmutación
Upgrade: WebSocket
conexion: Mejora
Sec-WebSocket-Accept: LMBSq6Bk9Kiv + zAbQlAL899pfzc =


El apretón de manos usando Chrome 19:

GET/Chatserver HTTP/1.1
Actualización: websocket
Conexión: Actualización
Anfitrión: (se omite en esta publicación)
Origen: (omitido para este post)
Sec-WebSocket-Key: TbwnVcuUiqGgZn7hxvxzvQ ==
Sec-WebSocket-Version: 13
SEC-WebSocket-Extensiones: x-webkit-deflate-frame

HTTP/1.1 101 Protocolos de conmutación
Upgrade: WebSocket
Conexión: Actualizar
Sec-WebSocket-Accept: D45BJ + Vfydy1Upcs3Hze/nuiaS8 =
SEC-WebSocket-Extensiones:


Todas las respuestas del servidor tienen \ r \ n terminaciones de línea e incluyen un \ r \ n adicional al final del mensaje.

FF12 y Chrome18 trabajo - Chrome19 no funciona. En Chrome19, el siguiente paquete después de la respuesta de handshake del servidor es FIN/ACK. La conexión está cerrada.

nb. También he intentado usar un guión como el valor Sec-WebSocket-Extensions, pero eso tampoco funcionó.

Respuesta

4

Ha encontrado el problema.

En primer lugar, la entrada en blanco Sec-WebSocket-Extensions en la respuesta del servidor producía un error "Invalid UTF-8 sequence in header value". Después de eliminar esa entrada, el error restante fue "A server must not mask any frames that it sends to the client."

De hecho, la implementación de mi servidor (una versión muy modificada de PHPWebSocket) se predetermina para enmascarar los marcos que envía. El cambio de este comportamiento predeterminado solucionó el problema y la conexión websocket ahora funciona en Chrome 19.

Agregando la etiqueta PHPWebSocket a esta pregunta, ya que es un problema con ese proyecto.

+0

Hola Aaron, Por favor, ¿me puede indicar dónde y qué cambiar? Tengo exactamente el mismo problema, estoy usando el mismo PHP-Websocket y de repente ha dejado de funcionar en la última versión de Chrome. –

+0

@ClintonGreen: busque la función de envío en Connection.php. Verá en los argumentos que $ enmascarado está predeterminado en verdadero. Ese argumento debe ser falso para que el envío funcione correctamente en Chrome 19+. Lo siento por la respuesta tardía. – Aaron

+0

muchas gracias. Voy a darle una oportunidad. Aclamaciones –

0

Para Chrome, el encabezado "Sec-WebSocket-Protocol" debe tener valor tanto para el servidor como para el cliente. Este es el caso para mí.

Cuestiones relacionadas