如何将自定义头从JavaScript WebSocket客户端发送到服务器?

如何将自定义头从JavaScript WebSocket客户端发送到服务器?,javascript,java,websocket,client-server,Javascript,Java,Websocket,Client Server,我知道没有标准的JS WebSocket API可以实现同样的功能。我的主要目的是从JS web socketclient向服务器发送信息,如resourceId、routingInfo、auth token、protocol等 我可以想到以下几种方法。如果我的方法很好或者有其他更好的方法,请分享我的想法: 我们可以使用cookies从客户端发送自定义头并在服务器端检索它们吗 我们是否可以将它们存储在浏览器中,并在服务器端检索它们 PS:我使用的是基于Java的服务器假设您谈论的是来自浏览器的w

我知道没有标准的JS WebSocket API可以实现同样的功能。我的主要目的是从JS web socketclient向服务器发送信息,如
resourceId
routingInfo
auth token
protocol

我可以想到以下几种方法。如果我的方法很好或者有其他更好的方法,请分享我的想法:

  • 我们可以使用cookies从客户端发送自定义头并在服务器端检索它们吗

  • 我们是否可以将它们存储在浏览器中,并在服务器端检索它们


  • PS:我使用的是基于Java的服务器

    假设您谈论的是来自浏览器的webSocket连接,下面是发送附加“类似标题”信息的传统选择

  • 您可以将它们编码为初始URL上的查询参数,除了
    auth-token
    之外,这可能适用于所有情况
  • 如果您连接webSocket连接的来源与您网页的来源相同,则可以将参数放入cookie中,这些cookie将与原始webSocket连接请求一起发送,服务器可在连接请求时检索这些参数
  • 您可以建立到服务器的“有条件”webSocket连接,然后在后续webSocket消息中发送凭据。您必须在服务器上实现安全性,以便“有条件地”连接的webSocket不允许执行除自身验证之外的任何其他操作,如果适当的凭据没有很快到达,则可能会超时连接
  • 听起来您可能已经知道,webSocket的浏览器界面不允许在启动webSocket连接的初始HTTP请求上使用自定义头。这些自定义头可以来自其他类型的客户端—只是webSocket连接的浏览器界面没有该功能

    我们可以使用web存储API将它们存储在浏览器中并检索它们吗


    web页面中的Javascript可以使用web存储API在浏览器中存储数据,稍后可以从同一来源的页面中的另一个脚本检索数据。该数据对服务器不可用,仅在客户端可用。

    感谢@jfriend00的及时回复。由于安全问题,我不必将它们作为查询参数发送。还有一点需要澄清,如果我们在web存储API中设置数据,我们是否也可以在服务器端检索它们?@rahul-否。web存储API仅用于客户端存储。您只能从客户端访问它(它由浏览器存储在本地计算机的文件系统中)。@rahul-FYI,如果您使用SSL保护您的webSocket连接,则URL本身(包括查询参数)对接收服务器以外的任何人都不可见。另一个选项:4。有一个GET api,它返回一个临时的、仅限一次使用的websocket URL。GET api可以获取您想要的任何api,然后客户端连接到临时(比如30秒)一次性URL。有点像身份验证令牌,但将其包含在URL中并记录下来是完全安全的,因为一旦记录下来,它就没用了。