小编mrm*_*ine的帖子

如何让 Chrome 通过 WebSocket 握手请求发送 cookie?

我需要发送带有 websocket 握手请求的 cookie,以确保负载均衡器将请求路由到特定后端。这在 Firefox、Safari 和 websocket-sharp 中工作正常,但我无法让 Chrome 使用 websocket 握手请求发送 cookie。

我在我的负载均衡器 (Traefik) 中启用了粘性会话,它在 Firefox 和 Safari 上使用我现有的 SockJS 代码“正常工作”。

第一个请求没有 cookie,负载均衡器在握手响应(101 交换协议)上设置一个。后续的 websocket 握手请求发送 cookie,生成的 websocket 连接建立到正确的后端。

在我的 websocket-sharp 客户端中,我在打开连接之前显式设置了 cookie,它按预期工作。

Chrome 从不发送带有 websocket 握手请求的 cookie。我尝试了现有的 SockJS,在其他请求上由负载均衡器设置 cookie,或者在发送请求之前立即在发出 websocket 请求的文档中明确设置。

我想简单的key=val饼干,并与选项设置,例如各种其它组合饼干pathdomainmax-agesecuresamesite,等。

在任何站点(例如https://www.google.com)的 Chrome 开发工具控制台中,执行:

document.cookie = 'key=val'
new WebSocket('wss://www.google.com')
Run Code Online (Sandbox Code Playgroud)

请注意,该方案必须是wss在查看页面时httpsws查看页面时http。此外,所查看的页面中的域和端口以及 websocket 的 URL 是相同的,如origin …

cookies google-chrome websocket

8
推荐指数
1
解决办法
5833
查看次数

标签 统计

cookies ×1

google-chrome ×1

websocket ×1