'Sec-WebSocket-Accepter d'en-tête est manquante dans Chrome 17
Edit:
J'ai essayé ce phpwebsocket: http://www.wilky.it/Shared/phpwebsocket.zip et il fonctionne dans Firefox, mais ma question demeure: comment puis-je obtenir les websockets pour fonctionner avec un serveur php en Chrome 17?
Je suis en suivant le tutoriel ici: http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/
Il semble que le client se connecte puis se déconnecte immédiatement. J'ai remarqué cette erreur dans la console:
Erreur lors de WebSocket poignée de main: 'Sec-WebSocket-Accepter d'en-tête est manquante
J'essaie en Chrome 17.0.963.56 sur mon WAMP en localhost avec le php_sockets extension activée.
J'ai vu mentionné quelque part que Chrome avait changé de ce qu'il prises en charge, mais il n'avait pas d'aller en profondeur sur la façon de le résoudre. J'espérais que quelqu'un pourrait me guider. (Je suis nouvelle marque pour les websockets).
Serveur:
{PATH}>php startDaemon.php
2012-02-20 07:02:51: Système de Prise de Ressource id #7 créé.
2012-02-20 07:02:51 Système: Socket lié à localhost:8000.
2012-02-20 07:02:51 Système: Démarrer l'écoute sur une Socket.
2012-02-20 07:03:01 WebSocket: Resource id #8!
2012-02-20 07:03:01 WebSocket: demande de poignée de main...
2012-02-20 07:03:01 WebSocket: La Poignée De Main...
2012-02-20 07:03:01 WebSocket: Fait la poignée de main...
2012-02-20 07:03:01 WebSocket: Resource id #8 déconnecté!
Client:
Socket D'État: 0
Socket Statut: 3 (Fermé)
Je suis en utilisant exactement le code à partir de ce lien. Je ne suis pas sûr exactement ce que vous demandez?
Je pose la question pour vous d'ajouter de l'instrumentation pour le code d'imprimer la demande de négociation (à partir du navigateur) et la réponse (à partir du serveur).
Je pense que vous êtes à l'aide de ce projet: github.com/GeorgeNava/phpwebsocket , À mon avis, l'utilisation de cette fourche projet: github.com/esromneb/phpwebsocket au lieu de cela, Ce travail bien et ne manque pas de
Sec-WebSocket-Accept
.OriginalL'auteur allicarn | 2012-02-20
Vous devez vous connecter pour publier un commentaire.
J'ai le même problème (et je ne semble pas être en mesure de poster un commentaire ici, donc je poste une réponse).
En fait, j'ai juste téléchargé et testé phpwebsocket.
Sur safari 5.1.4, il fonctionne très bien.
Sur Chrome 17 ans, j'ai eu la même erreur dans le script de log de la console:
Donc, dans websocket.class.php, j'ai ajouté à l'en-tête retournée par le serveur:
Et j'obtiens l'erreur:
Maintenant, l'en-tête reçu par le serveur:
Et l'en-tête envoyé par le serveur est:
La Sec-WebSocket-Accepter semble bonne, mais il ya encore une erreur d'incompatibilité. Voyez-vous une erreur quelque part? Peut-être que le protocole a changé pour calculer le Sec-WebSocket-Accepter, mais je ne le trouve pas... Merci pour votre aide!
Edit: Ici semble être la solution (pour moi, au moins): en ajoutant le paramètre true à la fonction SHA1, que l'on trouve dans les fichiers donnés en ce problème de thread. Ainsi, la Sec-WebSocket-Accepter doit être trouvé comme ceci:
Et, Sec-WebSocket-Clé1 et Sec-WebSocket-Clé2 ne semble pas être présent dans la demande du client, au lieu de cela, $key doit être extraite de l'en-tête: "Sec-WebSocket-Clé".
Nouvelle émission: Il semble aussi que, même si le web socket de connexion fonctionne maintenant sur la poignée de main, il se déconnecte lorsque le premier message est envoyé.
OriginalL'auteur
J'ai remarqué que dans la console de Chrome 19:
Un serveur ne doit pas masquer les images qu'il envoie au client.
C'est peut-être le problème. Il se déconnecte dès qu'un message est envoyé. Il fonctionne très bien dans Firefox.
J'ai fixé ce websocket problème et il fonctionne dans chrome maintenant.
J'ai d'abord utilisé:
Ensuite, j'ai utilisé le coder la fonction de:
https://github.com/lemmingzshadow/php-websocket
Je fixe le remplacement de l'encodage de la fonction avec celle de la connection.php fichier dans lemmingzshadow de github et il a commencé à travailler. La fonction est appelée: hybi10Encode dans le \server\lib\WebSocket\connection.php fichier.
modifier ce paramètre dans la fonction encode: $masqué = true $masqué = false
OriginalL'auteur
Un moyen FACILE de corriger, c'est d'ajouter
Sec-WebSocket-Accept
informations lorsque do_handshake, code comme ci-dessous:où,
$accept = base64_encode(SHA1($key."258EAFA5-E914-47DA-95CA-C5AB0DC85B11", true));
$key est
Sec-WebSocket-Key
obtenu à partir de $buffer, vous pouvez print_r($buffer) pour avoir un coup d'oeil.J'espère que cela peut résoudre votre problème..
OriginalL'auteur