是否可以通过WebSocket握手发送自定义数据?

是否可以通过WebSocket握手发送自定义数据?

问题描述:

假设我有自己定制的基于Java Chromium Embedded Framework (JCEF)的网页浏览器,它在内部运行WebSocket服务器。是否可以通过WebSocket握手发送自定义数据?

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

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

一个这样做的方法是通过以下步骤:

  1. 有无CustomWebBrowser产生一个秘密,并从JCEF发送秘密使用Java-JavaScript bridge Web应用程序。
  2. Web App将发送秘密内部的WebSocket服务器的握手过程中,这样的事情:

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

  3. 内部的WebSocket服务器可以验证与CustomBrowser其产生和传送来的秘密的秘密在步骤1中。

  4. 如果秘密被验证,那么握手成功完成,否则websocket连接被拒绝。

我的问题是:是否有可能WebSocket的握手期间发送任何自定义数据?

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

WebSocket客户端/服务器的库可能不允许这样做;但在从客户端发起连接时,始终可以在url或中嵌入信息。