报错:Result: {"errorCode":-1,"errorMessage":"Websocket bad handshake.","statusCode":430}
时间: 2023-08-15 09:08:33 浏览: 283
这个错误提示是因为Websocket握手失败导致的。可能原因有以下几种:
1. 请求的URL不正确或不完整,需要检查URL是否正确。
2. 请求的协议不正确,需要确认是否使用了正确的协议。
3. 请求的端口号不正确,需要确认是否使用了正确的端口号。
4. 请求的头部信息不正确,需要确认请求头部信息是否正确。
5. 服务器端返回的响应信息不正确,需要确认服务器是否正确响应了握手请求。
需要根据具体情况进行排查和解决。
相关问题
前端报错:failed: Error during WebSocket handshake: Unexpected response code: 200, 后端报错: Result: {"errorCode":-1,"errorMessage":"Websocket bad handshake.","statusCode":430}
这个错误可能是由于前端和后端使用的 WebSocket 协议版本不一致导致的。WebSocket 协议有多个版本,不同版本之间可能存在不兼容的情况。
你可以检查一下前端和后端使用的 WebSocket 协议版本是否一致,如果不一致,可以尝试升级或降级其中一方的协议版本。你还可以尝试在前端和后端都加上一些选项来兼容不同的协议版本,例如:
前端:
```javascript
const socket = io({
transports: ['websocket'],
upgrade: false
});
```
后端:
```python
socketio = SocketIO(app, cors_allowed_origins="*", engineio_logger=True, logger=True, ping_timeout=10, ping_interval=5, async_handlers=True, websocket_compression_options={})
```
其中,前端的 `upgrade` 参数设置为 `false` 可以禁用协议升级,后端的 `websocket_compression_options` 参数设置为空字典可以禁用压缩。
如果以上方法都无法解决问题,你可以尝试在前端和后端的日志中查找更多的错误信息,以便更好地定位问题所在。
前后端分离项目使用WebSocket,报错 The remote party closed the WebSocket connection without completing the close handshake. 怎么解决,或者给一个完整的案例
这个错误通常是由于 WebSocket 连接中断或者关闭时未完成关闭握手导致的。解决方法如下:
1. 检查前后端代码中 WebSocket 的实现是否正确,特别是在连接关闭时是否进行了关闭握手。
2. 检查网络是否稳定,是否存在连接中断的情况。可以使用网络监控工具进行检测。
3. 检查服务器是否存在负载过大的情况,导致 WebSocket 连接被关闭。
下面是一个基于 Spring Boot 的 WebSocket 示例代码,可能对你有帮助:
前端代码(使用 JavaScript):
```javascript
var socket = new WebSocket('ws://localhost:8080/ws');
socket.onopen = function() {
console.log('WebSocket connected');
}
socket.onmessage = function(event) {
console.log('Received message: ' + event.data);
}
socket.onclose = function(event) {
console.log('WebSocket closed with code: ' + event.code + ', reason: ' + event.reason);
}
socket.onerror = function(error) {
console.error('WebSocket error: ' + error);
}
```
后端代码(使用 Spring Boot):
```java
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new MyWebSocketHandler(), "/ws").setAllowedOrigins("*");
}
}
class MyWebSocketHandler extends TextWebSocketHandler {
@Override
public void afterConnectionEstablished(WebSocketSession session) {
System.out.println("WebSocket connected");
}
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
System.out.println("Received message: " + message.getPayload());
session.sendMessage(new TextMessage("Hello, " + message.getPayload()));
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
System.out.println("WebSocket closed with code: " + status.getCode() + ", reason: " + status.getReason());
}
}
```
这个示例代码实现了一个简单的 WebSocket 服务,前端代码连接到 ws://localhost:8080/ws,后端代码使用 Spring Boot 实现 WebSocketHandler 接口来处理 WebSocket 连接。如果连接关闭时未完成关闭握手,会输出类似如下的错误信息:
```
o.s.w.s.adapter.HttpWebSocketHandlerAdapter : Handling WebSocketMessage failed
java.io.IOException: The remote party closed the WebSocket connection without completing the close handshake.
at org.springframework.web.socket.adapter.standard.StandardWebSocketSession.handleClose(StandardWebSocketSession.java:406) ~[spring-websocket-5.3.13.jar:5.3.13]
at org.springframework.web.socket.adapter.standard.StandardWebSocketSession.doClose(StandardWebSocketSession.java:367) ~[spring-websocket-5.3.13.jar:5.3.13]
at org.springframework.web.socket.adapter.standard.StandardWebSocketSession.close(StandardWebSocketSession.java:310) ~[spring-websocket-5.3.13.jar:5.3.13]
...
```
希望对你有帮助!
阅读全文