Socket.io-client: 仅具有Websocket的EXTRA HEADER

创建于 2020-04-21  ·  7评论  ·  资料来源: socketio/socket.io-client

当前仅websocket连接不支持额外的标头。 在文档中,您说RFC 6455不“兑现”。
如果您看第22/10页
https://tools.ietf.org/html/rfc6455#page -22

  1. (可选)其他标头字段,例如用于发送的标头字段
    Cookie或向服务器请求身份验证。 标题未知
    根据[RFC2616],将忽略所有字段。

显然,它支持它,我个人也觉得它非常有用。 同样,engine.io使用的ws库也没有那么复杂。
有什么支持吗? 谢谢

question

最有用的评论

大家好。
那没起效。
我刚刚在集成测试中对其进行了测试,但无法正常工作。

所有7条评论

https://github.com/socketio/engine.io-client/blob/27fa6949f38896e18a6ef426516359f8d54e7db6/lib/socket.js#L124

https://github.com/socketio/engine.io-client/blob/master/lib/transports/websocket.js#L63

通过阅读上面提到的源代码,您可以通过以下方法实现此目的:

socketIO('https://example.org', {
  path: '/api/endpoint',
  transports: ['websocket'],
  transportOptions: {
    websocket: {
      extraHeaders: {
        Cookie: 'It works',
      },
    },
  },
});

甚至这样:

socketIO('https://example.org', {
  path: '/api/endpoint',
  transports: ['websocket'],
  extraHeaders: {
    Cookie: 'It works',
  },
});

基于源代码段,确实看起来没有限制,但是您是否进行了测试? 我将在以后有时间的时候对其进行测试,但是如果它可以工作,则说明文档需要更新,因为:

https://socket.io/docs/client-api/#With -extraHeaders:

带有extraHeaders
这仅在启用轮询传输(默认设置)的情况下有效。 使用websocket作为传输时,不会附加自定义标头。 发生这种情况是因为WebSocket握手不支持自定义标头。 (有关背景,请参阅WebSocket协议RFC)

const socket = io({ transportOptions: { polling: { extraHeaders: { 'x-clientid': 'abc' } } }});

另有说明...

大家好。
那没起效。
我刚刚在集成测试中对其进行了测试,但无法正常工作。

@najibghadri @behruzz在上面的示例中它对我不要将extreHeader置于轮询之下

它在nodejs中运行时对我有用,而在chrome中运行时则不行。 无法完成此操作,因为浏览器api不支持此操作https://developer.mozilla.org/zh-CN/docs/Web/API/WebSocket
我需要负载平衡器的标头将请求正确地传递到套接字服务器,但是我猜我们将需要一种不同的机制

似乎有人认为它应该起作用,因为根据文档:

extraHeaders | {} | 将为每个请求(通过xhr-polling和通过websockets)传递给服务器的标头。 然后,可以在握手期间或特殊代理中使用这些值。

顺便说一句,如果您不能使用Cookie,这是否基本上就意味着您只能使用IP地址进行粘性平衡?

@AvailCat请注意,您提供的示例在浏览器中不起作用

@rotvr如果仅使用WebSocket传输,则不需要粘性会话,因为WebSocket连接(以及基础的TCP连接)在整个会话期间保持打开状态。

如果确实使用轮询传输,则第一个HTTP请求将设置一个cookie( io ),该cookie可用于粘性会话。

此处提供更多信息: https :

另请参阅: https :

此页面是否有帮助?
0 / 5 - 0 等级