Die Überschrift "Sec-WebSocket-Accept" fehlt in Chrome 17

10

Bearbeiten: Ich habe dieses phpwebsocket versucht: Ссылка und es funktioniert in Firefox, aber meine Frage bleibt immer noch: wie bekomme ich websockets zu Mit einem PHP-Server in Chrome 17 arbeiten?

Ich folge dem Tutorial hier: Ссылка

Es scheint so, als ob der Client eine Verbindung herstellt und die Verbindung sofort getrennt wird. Ich habe diesen Fehler in der Konsole bemerkt:

  

Fehler beim WebSocket-Handshake: Der Header 'Sec-WebSocket-Accept' fehlt.

Ich versuche es in Chrome 17.0.963.56 auf meinem WAMP-localhost mit der php_sockets-Erweiterung, die aktiviert ist.

Ich habe irgendwo erwähnt, dass Chrome das, was es unterstützt hat, geändert hat, aber es ging nicht genau darauf ein, wie es zu beheben ist. Ich hatte gehofft, dass jemand mich durchgehen könnte. (Ich bin brandneue zu Websockets).

Server:

  

{PATH} & gt; php startDaemon.php

     

2012-02-20 07:02:51 System: Socket Ressourcen-ID # 7 erstellt.

     

2012-02-20 07:02:51 System: Socket an localhost gebunden: 8000.

     

2012-02-20 07:02:51 System: Hören Sie auf Socket zu hören.

     

2012-02-20 07:03:01 WebSocket: Ressourcen-ID # 8 CONNECTED!

     

2012-02-20 07:03:01 WebSocket: Anfordern von Handshake ...

     

2012-02-20 07:03:01 WebSocket: Handshake ...

     

2012-02-20 07:03:01 WebSocket: Fertig Handshake ...

     

2012-02-20 07:03:01 WebSocket: Ressourcen-ID # 8 getrennt!

Kunde:

  

Socket-Status: 0

     

Socket-Status: 3 (geschlossen)

    
allicarn 20.02.2012, 07:23
quelle

3 Antworten

1

Ich habe das gleiche Problem (und ich kann anscheinend keinen Kommentar hier posten, also poste ich eine Antwort).

Eigentlich habe ich phpwebsocket gerade heruntergeladen und getestet.

Auf Safari 5.1.4 funktioniert es gut.

In Chrome 17 habe ich denselben Fehler in der Skriptprotokollkonsole erhalten:

%Vor%

Also, in websocket.class.php habe ich zu dem vom Server zurückgegebenen Header hinzugefügt:

%Vor%

Und ich bekomme den Fehler:

%Vor%

Der vom Server empfangene Header lautet nun:

%Vor%

Und der vom Server zurückgesendete Header ist:

%Vor%

Der Sec-WebSocket-Accept scheint gut, aber es gibt immer noch einen Mismatch-Fehler. Siehst du irgendwo einen Fehler? Vielleicht hat sich das Protokoll geändert, um das Sec-WebSocket-Accept zu berechnen, aber ich finde es nicht ... Danke für deine Hilfe!

Bearbeiten: Hier scheint die Lösung zu sein (zumindest für mich): das Hinzufügen des Parameters zur SHA1-Funktion, wie er in dieser Problem-Thread . Also muss das Sec-WebSocket-Accept wie folgt gefunden werden:

%Vor%

Und, Sec-WebSocket-Key1 und Sec-WebSocket-Key2 scheinen in der Client-Anfrage nicht mehr vorhanden zu sein, stattdessen muss $ key aus dem Header extrahiert werden: "Sec-WebSocket-Key".

>

Neues Problem : Auch wenn die Web-Socket-Verbindung jetzt auf dem Handshake funktioniert, wird die Verbindung getrennt, sobald die erste Nachricht gesendet wird.

    
Jo Pango 17.03.2012 16:37
quelle
0

Ich bemerkte, dass in der Konsole von Chrome 19: Ein Server darf keine Frames maskieren, die er an den Client sendet. Vielleicht ist das das Problem. Es wird getrennt, sobald eine Nachricht gesendet wird. Es funktioniert gut in Firefox.

Ich habe dieses Websocketproblem behoben und es funktioniert jetzt in Chrome. Zuerst habe ich benutzt:

Dann habe ich die encode-Funktion verwendet von: Ссылка

Ich reparierte die kodierte Funktion mit der in der Datei connection.php in Lemmingzshadows Github und es begann zu arbeiten. Die Funktion heißt: hybi10Encode in der Datei \ server \ lib \ WebSocket \ connection.php.

Ändern Sie diesen Parameter in der Funktion encode: $ masked = true zu $ ​​masked = false

    
PHPGuru 30.06.2012 04:13
quelle
-1

Eine einfache Möglichkeit zu beheben ist hinzufügen Sec-WebSocket-Accept Informationen, wenn do_handshake, Code wie folgt:

%Vor%

wo,

$accept = base64_encode(SHA1($key."258EAFA5-E914-47DA-95CA-C5AB0DC85B11", true));

$ key ist Sec-WebSocket-Key hat von $ buffer bekommen, du kannst print_r ($ buffer) ansehen.

Hoffe, das kann dein Problem lösen.

    
navins 06.03.2013 17:53
quelle