Cél*_*lio 10 java java-ee websocket java-7 java-ee-7
我需要能够在握手期间中止websocket连接,以防HTTP请求不符合某些条件.根据我的理解,正确的地方是我自己实现的ServerEndpointConfig.Configurator.modifyHandshake()方法Configurator.我只是无法弄清楚要做什么来中止连接.有一个HandshakeResponse参数,允许向响应添加标题但我找不到任何执行该工作的标题.
那么如何在握手期间中止websocket连接呢?这甚至可能吗?
你是对的,使用 \xc2\xb4modifyHandShake()\xc2\xb4 来更新响应标头,您需要准确删除或设置标头的值Sec-WebSocket-Accept,请从规范中检查这一点
\n\n|Sec-WebSocket-Accept| 标头字段指示服务器是否愿意接受连接。如果存在,此标头字段必须包含在\n|Sec-WebSocket-Key| 中发送的客户端随机数的哈希值 以及预定义的 GUID。任何其他值\n不得被解释为服务器\n接受连接。
\n
HTTP/1.1 101 Switching Protocols\n Upgrade: websocket\n Connection: Upgrade\n Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\nRun Code Online (Sandbox Code Playgroud)\n\n\n这些字段由 WebSocket 客户端检查脚本页面。\n如果 |Sec-WebSocket-Accept| 值与\n预期值不匹配,如果标头字段缺失,或者 HTTP 状态代码\n不是 101,则将无法建立连接,并且不会发送 WebSocket 帧。\n
\n
你的代码看起来像这样:
\n @Override\npublic void modifyHandshake(ServerEndpointConfig sec,\n HandshakeRequest request, HandshakeResponse response) {\n super.modifyHandshake(sec, request, response);\n response.getHeaders().put(HandshakeResponse.SEC_WEBSOCKET_ACCEPT, new ArrayList<String>());\n}\nRun Code Online (Sandbox Code Playgroud)\n浏览器会将此解释为服务器未接受连接。例如在 chrome 中我收到消息
\n\n\nWebsocket握手时出错
\n
| 归档时间: |
|
| 查看次数: |
3272 次 |
| 最近记录: |