假设我有自己的基于Java Chromium Embedded Framework(JCEF)的定制web浏览器,它在内部运行WebSocket服务器。
现在,我的web应用程序在我的CustomWebBrowser上运行,可以使用WebSocket与内部WebSocket服务器连接。
但是,我不希望任何其他websocket客户端(另一个使用websocket的浏览器或桌面应用程序)连接到我的内部websocket服务器。
其中一种方法是遵循以下步骤:
- 让CustomWebBrowser生成一个秘密,并使用JavaJavaScript桥将该秘密从JCEF发送到web应用程序
-
Web应用程序将在握手期间将该秘密发送到内部WebSocket服务器,类似于以下内容:
var ws = new WebSocket(myURL, protocols, mySecret);
-
内部WebSocket服务器可以使用在步骤1中生成并发送机密的CustomBrowser来验证机密。
-
如果验证了机密,则握手成功完成,否则拒绝websocket连接。
我的问题是:是否可以在websocket握手期间发送任何自定义数据?
是的,WebSocket握手使用外观正常的HTTP请求/响应,您可以向其中添加包含自定义信息的任意标头。
WebSocket客户端/服务器的库可能不允许这样做;但是当从客户端启动连接时,您总是可以在url
或protocol
中嵌入信息。