google chrome - debug - El encabezado ''Sec-WebSocket-Accept'' falta en Chrome 17
debug websocket chrome (3)
Me di cuenta de que en la consola de Chrome 19: Un servidor no debe enmascarar los marcos que envía al cliente. quizá este es el problema. Se desconecta tan pronto como se envía un mensaje. Funciona bien en Firefox.
Solucioné este problema de websocket y ahora funciona en Chrome. Primero utilicé:
Luego usé la función de codificación de: https://github.com/lemmingzshadow/php-websocket
Arreglé la función de codificación reemplazada con la del archivo connection.php en github de lemmingzshadow y comenzó a funcionar. La función se llama: hybi10Encode en el archivo / server / lib / WebSocket / connection.php.
cambie este parámetro en la codificación de la función: $ enmascarado = verdadero en $ enmascarado = falso
Editar: Probé este phpwebsocket: http://www.wilky.it/Shared/phpwebsocket.zip y funciona en Firefox, pero mi pregunta aún permanece: ¿cómo hago para que websockets funcione con un servidor php en Chrome 17?
Estoy siguiendo el tutorial aquí: http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/
Parece que el cliente se conecta y luego se desconecta inmediatamente. Me di cuenta de este error en la consola:
Error durante el protocolo de enlace WebSocket: Falta el encabezado ''Sec-WebSocket-Accept''
Lo intento en Chrome 17.0.963.56 en mi localhost WAMP con la extensión php_sockets habilitada.
Vi en alguna parte que Chrome había cambiado lo que soportaba, pero no profundizó en cómo solucionarlo. Esperaba que alguien pudiera ayudarme a superarlo. (Soy nuevo en websockets).
Servidor:
{RUTA}> php startDaemon.php
2012-02-20 07:02:51 Sistema: Identificación de Socket Resource # 7 creada.
2012-02-20 07:02:51 Sistema: socket vinculado a localhost: 8000.
2012-02-20 07:02:51 Sistema: Comienza a escuchar en Socket.
2012-02-20 07:03:01 WebSocket: Identificación del recurso # 8 ¡CONECTADO!
2012-02-20 07:03:01 WebSocket: solicitando un apretón de manos ...
2012-02-20 07:03:01 WebSocket: Handshaking ...
2012-02-20 07:03:01 WebSocket: Hecho apretón de manos ...
2012-02-20 07:03:01 WebSocket: Identificación del recurso # 8 desconectado!
Cliente:
Estado del zócalo: 0
Estado del zócalo: 3 (cerrado)
Tengo el mismo problema (y parece que no puedo publicar un comentario aquí, así que publico una respuesta).
En realidad, acabo de descargar y probar phpwebsocket.
En safari 5.1.4, funciona bien.
En Chrome 17, recibí el mismo error en la consola de registro de scripts:
Error during WebSocket handshake: ''Sec-WebSocket-Accept'' header is missing
Entonces, en websocket.class.php, agregué al encabezado devuelto por el servidor:
$accept = base64_encode(SHA1($key."258EAFA5-E914-47DA-95CA-C5AB0DC85B11"));
Y obtengo el error:
Error during WebSocket handshake: Sec-WebSocket-Accept mismatch
Ahora, el encabezado recibido por el servidor es:
GET /websocket/server.php HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: localhost:12345
Origin: http://localhost:8888
Sec-WebSocket-Key: OqMJI0t/cOl6d6JNE+Op0g==
Sec-WebSocket-Version: 13
Y el encabezado enviado por el servidor es:
HTTP/1.1 101 WebSocket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Origin: http://localhost:8888
Sec-WebSocket-Location: ws://localhost:12345/websocket/server.php
Sec-WebSocket-Accept: ZjY5ODliNTViYzJlOTNkMjk4OTg3Y2U2NjQ3MTBlZjZiNzliYzk4Yg==
El Sec-WebSocket-Accept parece bueno, pero aún hay un error de desajuste. ¿Ves un error en alguna parte? Tal vez el protocolo ha cambiado para calcular Sec-WebSocket-Accept, pero no lo encuentro ... ¡Gracias por tu ayuda!
Editar: Aquí parece ser la solución (para mí, al menos): agregar el parámetro verdadero a la función SHA1, como se encuentra en los archivos que se dan en este tema . Entonces, el Sec-WebSocket-Accept debe encontrarse así:
$accept = base64_encode(SHA1($key."258EAFA5-E914-47DA-95CA-C5AB0DC85B11", true));
Y, Sec-WebSocket-Key1 y Sec-WebSocket-Key2 no parecen estar presentes en la solicitud del cliente, en su lugar, $ key debe extraerse del encabezado: "Sec-WebSocket-Key".
Problema nuevo : parece que incluso si la conexión del socket web ahora funciona en el handshake, se desconecta cuando se envía el primer mensaje.
Una manera FÁCIL de solucionarlo es agregar información Sec-WebSocket-Accept
cuando do_handshake, codificar de la siguiente manera:
list($resource,$host,$origin,$key) = $this->getheaders($buffer);
$accept = base64_encode(SHA1($key."258EAFA5-E914-47DA-95CA-C5AB0DC85B11", true));
$upgrade = "HTTP/1.1 101 Web Socket Protocol Handshake/r/n" .
"Upgrade: WebSocket/r/n" .
"Connection: Upgrade/r/n" .
"WebSocket-Origin: {$origin}/r/n" .
"WebSocket-Location: ws://{$host}{$resource}/r/n".
"Sec-WebSocket-Accept: " . $accept . "/r/n/r/n";
$this->handshakes[$socket_index] = true;
socket_write($socket,$upgrade,strlen($upgrade));
dónde,
$accept = base64_encode(SHA1($key."258EAFA5-E914-47DA-95CA-C5AB0DC85B11", true));
$ key es Sec-WebSocket-Key
obtenido de $ buffer, puede print_r ($ buffer) para echar un vistazo.
Espero que esto pueda resolver tu problema ...