是否可以使用 WebSocket 握手发送自定义数据?

Posted

技术标签:

【中文标题】是否可以使用 WebSocket 握手发送自定义数据?【英文标题】:Is it possible to send custom data with WebSocket handshake? 【发布时间】:2015-11-05 15:04:12 【问题描述】:

假设我有自己的基于Java Chromium Embedded Framework (JCEF) 的自定义网络浏览器,它在内部运行一个WebSocket 服务器。

现在我的 Web 应用程序在我的 CustomWebBrowser 上运行,可以使用 websockets 与内部 WebSocket 服务器连接。

但是,我不希望任何其他 websocket 客户端(使用 websockets 的其他浏览器或桌面应用程序)连接到我的内部 WebSocket 服务器。

其中一种方法是执行以下步骤:

    让 CustomWebBrowser 生成一个密钥,并使用 Java-javascript bridge 将该密钥从 JCEF 发送到 Web 应用程序。

    Web 应用程序将在握手期间将该秘密发送到内部 WebSocket 服务器,如下所示:

    var ws = new WebSocket(myURL, protocols, mySecret);

    内部 WebSocket 服务器可以使用在步骤 1 中生成并发送秘密的 CustomBrowser 来验证秘密。

    如果密码被验证,则握手成功完成,否则 websocket 连接被拒绝。

我的问题是:是否可以在 websocket 握手期间发送任何自定义数据?

【问题讨论】:

【参考方案1】:

是的,WebSocket handshake 使用正常的 HTTP 请求/响应,您可以向其中添加包含自定义信息的任意标头。

WebSocket 客户端/服务器的库可能不允许这样做;但是当从客户端启动连接时,您始终可以在urlprotocol 中嵌入信息。

【讨论】:

以上是关于是否可以使用 WebSocket 握手发送自定义数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何自定义 websocket 握手和/或添加过滤器?

如何自定义websocket握手和/或添加过滤器?

WebSocket - 关闭框架

WebSocket 服务器:向客户端发送文本帧

在 socket.io 中与握手数据一起发送自定义数据?

在 socket.io 中与握手数据一起发送自定义数据?