2012-02-25 7 views
4

私はlibeventでwebsocketサーバーを実装しましたが、ChromeやFirefoxには問題はありませんがIE10では接続できません。ここでIE10はハンドシェイク後に接続を閉じます

握手:

IE10 Request: 
GET /echo HTTP/1.1 
Origin: 95.115.195.4 
Sec-WebSocket-Key: rgPWUlUtk+h3CPWqk99OtA== 
Connection: Upgrade 
Upgrade: Websocket 
Sec-WebSocket-Version: 8 
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0) 
Host: 95.115.195.4:5555 
Cache-Control: no-cache 

Server Response: 
HTTP/1.1 101 Switching Protocols 
Upgrade: Websocket 
Connection: Upgrade 
Sec-WebSocket-Accept: jGmgQ/jOvew8MU9o3bbqPG9PHlY= 
Sec-WebSocket-Protocol: chat 

IE10デバッガは言う: SCRIPT12152:WebSocketのエラー:不正なHTTPレスポンス。ステータスコード101

誰かが間違っていることを知っていますか?

おかげ

答えて

5

クライアントは、サブプロトコルのリストを送信しませんでしたが、あなたのサーバーは、サブプロトコル値として「チャット」送り返されてきました。 IETF 6455 WebSocket specの19ページ(セクション4.1クライアントの要件の終わり)によると:

6. If the response includes a |Sec-WebSocket-Protocol| header field 
    and this header field indicates the use of a subprotocol that was 
    not present in the client's handshake (the server has indicated a 
    subprotocol not requested by the client), the client MUST _Fail 
    the WebSocket Connection_. 

サーバは「SEC-のWebSocket-Protocolの:サブプロトコルは」送るべきクライアントは「SEC-を送信した場合、クライアントにヘッダWebSocket-Protocol:SUBPROTOCOL、... "ヘッダーをサーバーに送信します。クライアントはサブプロトコルのリストを送信することができます。サブプロトコルのリストを送信できる場合は、リストから応答するサブプロトコルを選択する必要があります。

FirefoxとChromeがあまりにも寛容で、現在のバージョンの仕様を遵守していない可能性があります。

+1

それを解決しました!ありがとう! –