【发布时间】:2016-12-13 22:14:16
【问题描述】:
我需要使用 messagewebsocket,但文档说 SetRequestHeader 方法不支持 sec-websocket-extensions。我需要接收的数据作为单个入站 websocket 数据包整体发送。
初始 http 标头需要 sec-websocket-key 和 -version 值。
我该如何解决这个问题?
【问题讨论】:
我需要使用 messagewebsocket,但文档说 SetRequestHeader 方法不支持 sec-websocket-extensions。我需要接收的数据作为单个入站 websocket 数据包整体发送。
初始 http 标头需要 sec-websocket-key 和 -version 值。
我该如何解决这个问题?
【问题讨论】:
初始 http 标头需要 sec-websocket-key 和 -version 值。
为了通过WebSocket连接到服务器,客户端必须先向服务器发送一个打开握手。 Sec-WebSocket-Key 标头字段用于WebSocket 打开握手,必须包含它。如果没有此字段,MessageWebSocket 将无法成功连接服务器。所以实际上MessageWebSocket APIs 已经将此字段设置为标题。您不需要设置请求标头。可以使用Fiddler抓取MessageWebSocket发送的get请求,在header中会看到Set-WebSocket-Key和Set-WebSocket-Version。
由于此标头字段的Sec-WebSocket-Key 值必须是由随机选择的 16 字节组成的 nonce,并且必须为每个连接随机选择 nonce,因此此标头字段也不得在 HTTP 请求中出现多次,所以我们不能再次设置它。但是你可以通过代码另外设置一个Set-WebSocket-Version,虽然我认为你不需要这样做。
messageWebSocket.SetRequestHeader("Sec-WebSocket-Verson", "666");
有关WebSocket 协议的详细信息请参考RFC6455。有关如何在 UWP 应用中使用WebSocket 的更多详细信息,请参考official sample。此示例有服务器端和客户端进行测试。
【讨论】: