【问题标题】:How to send custom headers from JavaScript WebSocket client to the server?如何将自定义标头从 JavaScript WebSocket 客户端发送到服务器?
【发布时间】:2018-05-15 08:55:45
【问题描述】:

我知道没有相同的标准 JS WebSocket API。我的主要目标是将resourceIdroutingInfoauth-tokenprotocol 等信息从 JS web-socketclient 发送到服务器。

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

  1. 我们可以使用 cookie 从客户端发送自定义标头并在服务器端检索它们吗?

  2. 我们可以使用web-storage API 将它们存储在浏览器中并在服务器端检索它们吗?

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

【问题讨论】:

    标签: javascript java websocket client-server


    【解决方案1】:

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

    1. 您可以将它们编码为初始 URL 上的查询参数,这可能适用于除 auth-token 之外的所有内容。
    2. 如果您连接webSocket连接的来源与您的网页来源相同,那么您可以将参数放入cookie中,这些cookie将与原始webSocket连接请求一起发送,服务器可以检索它们连接请求。
    3. 您可以与服务器建立“有条件的”webSocket 连接,然后在后续的 webSocket 消息中发送凭据。您必须在您的服务器上实现安全性,以便“有条件地”连接的 webSocket 不允许做任何其他事情,除了对自身进行身份验证,并且如果适当的凭据没有很快到达,可能会使连接超时。

    您可能已经知道,webSockets 的浏览器接口不允许在启动 webSocket 连接的初始 HTTP 请求上使用自定义标头。这些自定义标头可能来自其他类型的客户端 - 只是 webSocket 连接的浏览器接口没有该功能。

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

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

    【讨论】:

    • 感谢@jfriend00 的及时回复。由于安全问题,我不必将它们作为查询参数发送。还需要澄清一点,如果我们在 web-storage API 中设置数据,我们也可以在服务器端检索它们吗?
    • @rahul - 不,web-storage API 仅是客户端存储。您只能从客户端访问它(它由浏览器存储在本地计算机的文件系统中)。
    • @rahul - 仅供参考,如果您使用 SSL 来保护您的 webSocket 连接,那么 URL 本身(包括查询参数)对接收服务器以外的任何人都是不可见的。
    • 另一种选择:4. 有一个 GET api,它返回一个临时的、1 次使用的 websocket URL。该 GET api 可以获取您想要的任何 API,然后客户端连接到临时(例如 30 秒)一次性 URL。有点像身份验证令牌,但包含在 URL 中并记录它是完全安全的,因为一旦被记录,它就没有用了。
    猜你喜欢
    • 2017-09-15
    • 1970-01-01
    • 2015-07-02
    • 2018-06-16
    • 1970-01-01
    • 2022-07-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多