SignalR WebSocket握手:缺少Sec-WebSocket-Accept头

6

SignalR 3-RC1在ASP.NET 5 RC1上的用户

尝试使用websocket时出现以下错误。

使用Chrome 50.0.2661.87

头文件如下:

请求头:
日期:Fri, 29 Apr 2016 13:51:54 GMT
服务器:Kestrel
传输编码:chunked
升级:websocket
X-内容类型选项:nosniff
X-Powered-By:ASP.NET

响应头:
接受编码:gzip、deflate、sdch
接受语言:en-US、en;q=0.8、fr;q=0.6
缓存控制:no-cache
连接:Upgrade
Cookie:...ASP.NET cookie
DNT:1
主机:host.tld
来源:http://host.tld
Pragma:no-cache
Sec-WebSocket-Extensions:permessage-deflate; client_max_window_bits
Sec-WebSocket-Key:liIKiClt7Z057EwteJYJXQ==
Sec-WebSocket-Version:13
升级:websocket
用户代理:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36

使用Microsoft.AspNet.WebSockets.Server 1.0.0-rc1

服务器设置: Windows Server 2012 R2 IIS 8.5

有什么办法可以解决这个问题吗?


1
为了搜索者的利益,这个线程有一个对我有效的答案 https://github.com/SignalR/SignalR/issues/3691。前往Windows功能 > 万维网服务 > 应用程序开发功能并启用Websocket协议。重置IIS并重新加载页面。 - JsAndDotNet
1
是的,我在GitHub上回答了自己的问题,但没有在这里哈哈哈。谢谢伙计! - DOMZE
2个回答

17

正如Hockey J所评论的那样,我在GitHub上回答了我的问题,但没有在这里。

为解决这个问题:

  1. 点击开始
  2. 输入turn windows
  3. 点击打开和关闭Windows功能
  4. 在控制面板窗口中,导航到Internet Information Services > World Wide Web Services > 应用程序开发功能
  5. 启用Websocket协议

enter image description here

  1. 点击开始
  2. 输入cmd,右键单击命令提示符并选择以管理员身份运行
  3. 在命令提示符中键入iisreset
  4. 刷新浏览器中的页面

请查看https://github.com/SignalR/SignalR/issues/3691


Windows 功能 > Internet Information Service(互联网信息服务) > 万维网服务 > 应用程序开发功能。对于 Windows Server,情况有所不同:https://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-websocket-protocol-support - ConductedClever
IIS 似乎因某种奇怪的原因更改了接收到的 Sec-WebSocket-Key。已通过手动记录该标头的值进行确认。它与客户端发送的不同。 - jjxtra

1
服务器的实现不好,但是你可以通过在请求中包含Sec-WebSocket-Key HTTP头来解决问题。为了符合规范,还需要Sec-WebSocket-Version头和Connection头。有关详细信息,请参见RFC 6455

实现直接在SignalR中完成,因此它是发送头文件等内容的程序。我无法控制发送哪些标题。我在他们的GitHub上开了一个问题,但我还没有收到回复。我认为这是我没有正确配置的问题,但根据我所读的,情况并非如此,人们正在使用解决方法(在PHP中)。 - DOMZE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接