【问题标题】:How to use Sec-Websocket-Extensions in MessageWebsocket upgrade requestMessageWebsocket升级请求中如何使用Sec-Websocket-Extensions
【发布时间】:2016-12-13 22:14:16
【问题描述】:

我需要使用 messagewebsocket,但文档说 SetRequestHeader 方法不支持 sec-websocket-extensions。我需要接收的数据作为单个入站 websocket 数据包整体发送。

初始 http 标头需要 sec-websocket-key 和 -version 值。

我该如何解决这个问题?

【问题讨论】:

    标签: c# .net websocket uwp


    【解决方案1】:

    初始 http 标头需要 sec-websocket-key 和 -version 值。

    为了通过WebSocket连接到服务器,客户端必须先向服务器发送一个打开握手。 Sec-WebSocket-Key 标头字段用于WebSocket 打开握手,必须包含它。如果没有此字段,MessageWebSocket 将无法成功连接服务器。所以实际上MessageWebSocket APIs 已经将此字段设置为标题。您不需要设置请求标头。可以使用Fiddler抓取MessageWebSocket发送的get请求,在header中会看到Set-WebSocket-KeySet-WebSocket-Version

    由于此标头字段的Sec-WebSocket-Key 值必须是由随机选择的 16 字节组成的 nonce,并且必须为每个连接随机选择 nonce,因此此标头字段也不得在 HTTP 请求中出现多次,所以我们不能再次设置它。但是你可以通过代码另外设置一个Set-WebSocket-Version,虽然我认为你不需要这样做。

     messageWebSocket.SetRequestHeader("Sec-WebSocket-Verson", "666");
    

    有关WebSocket 协议的详细信息请参考RFC6455。有关如何在 UWP 应用中使用WebSocket 的更多详细信息,请参考official sample。此示例有服务器端和客户端进行测试。

    【讨论】:

    • 我仍然无法设置版本,但我重新阅读了规范并且我试图做太多的工作。 .Net 负责处理我需要的所有标头。
    猜你喜欢
    • 2018-06-03
    • 2015-10-26
    • 1970-01-01
    • 2014-11-24
    • 2014-06-24
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多