gpt4 book ai didi

java - 使用 modifyHandshake 在 WebSocket 握手中添加 header

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:48:00 24 4
gpt4 key购买 nike

我正在尝试在握手期间发送自定义 header 。我可以使用 ServerEndpointConfig.Configurator 拦截握手并覆盖 modifyHandshake。

public class WebsocketConfigurator extends ServerEndpointConfig.Configurator {

public static final String HEADER_SOCKET_ID = "X-Socket-Id";

@Override
public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
String id = UUID.randomUUID().toString();

List<String> list = new ArrayList<String>();
list.add(id);
response.getHeaders().put(HEADER_SOCKET_ID, list);

sec.getUserProperties().put(HEADER_SOCKET_ID, id); }



}

该方法被调用并且 id 被添加到响应 header ,但它不发送额外的 header 。

我用 wireshark 嗅探它以确保它不是客户端框架:

GET /websocket HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: localhost:8080
Origin: http://localhost:8080
Pragma: no-cache
Cache-Control: no-cache
Sec-WebSocket-Key: QgZwJwVv8+i/vaKFHDqPZg==
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits, x-webkit-deflate-frame
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1941.0 Safari/537.36

HTTP/1.1 101 Switching Protocols
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Accept: Kim6Qjj7sOBLfG+6I++gS/OVx4A=
Sec-WebSocket-Extensions: permessage-deflate

.u.....0....y.R...K'6...9M
.....PU.......}..).B..g.P....D..4."!..R|._.@..Fp..G....c..0...].D...F.H...{E-.k{.pP...S{n...

我想将生成的 ID 发送给客户端,但不想在额外的调用中执行此操作。是否有未发送的原因或是否有不同的方法?

我在 dev blog 上找到了一个例子它还在 modifyHandshake 中添加了一个 header ,所以我猜理论上它应该是可能的。

最佳答案

我认为这是 Jetty 的 Websockets 实现中的一个错误。我在用

Jetty: 9.1.1.v20140108

我简要地查看了代码,在我看来他们在响应发送后调用了 modifyHandshake。尽管也可能是完全错误的。

但是升级到

 Jetty: 9.2.0.RC0

修复了这个问题。

GET /websocket HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: localhost:8080
Origin: http://localhost:8080
Pragma: no-cache
Cache-Control: no-cache
Sec-WebSocket-Key: P93FwyXNrD9ecVHCDywzTg==
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits, x-webkit-deflate-frame
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.8 Safari/537.36

HTTP/1.1 101 Switching Protocols
Date: Tue, 20 May 2014 10:58:31 GMT
Connection: Upgrade
Sec-WebSocket-Accept: U+tHV5zYWWSX8vDsVdiDo7yUN9s=
Upgrade: WebSocket
X-Socket-Id: f16bc17b-9a5c-45a4-a851-9d66ffb1d2f1

关于java - 使用 modifyHandshake 在 WebSocket 握手中添加 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23714686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com