websocket失败:WebSocket握手期间出错:意外响应代码:400
Posted
技术标签:
【中文标题】websocket失败:WebSocket握手期间出错:意外响应代码:400【英文标题】:websocket failed: Error during WebSocket handshake: Unexpected response code: 400 【发布时间】:2016-02-14 17:32:34 【问题描述】:我正在使用 ec2,使用 socksJS 的 spring websocket 在本地运行良好。 我已经尝试过以下事情。 1. 我没有任何阻塞 TCP 的负载均衡器。请求直接去ec2服务器 2.使用真实IP代替ec2服务器名称。
虽然服务器在 chrome 控制台中出现以下问题,但应用服务器日志中没有错误
WebSocket connection to 'ws://ec2-XX-X-XXX-XXX.compute-1.amazonaws.com/ws/963/kaidmvd9/websocket' failed: Error during WebSocket handshake: Unexpected response code: 400
app.service('SocketService', function(httpService,$rootScope,SoundService)
this.registerMe = function(callback)
$rootScope.socket = new SockJS("/ws");
$rootScope.stompClient = Stomp.over($rootScope.socket);
$rootScope.stompClient.connect('guest', 'guest', function(frame1)
$rootScope.stompClient.subscribe('/user/'+$rootScope.loggedInUser.username+'/reply', function(frame2)
var msg = JSON.parse(frame2.body);
console.log(msg);
);
,
function(error)
console.log(error.headers.message);
););
春天的xml
<websocket:message-broker application-destination-prefix="/app" >
<websocket:stomp-endpoint path="/ws">
<websocket:sockjs />
</websocket:stomp-endpoint>
<websocket:simple-broker prefix="/topic,/user" />
</websocket:message-broker>
【问题讨论】:
您是从同一个ec2-XX-X-XXX-XXX.compute-1.amazonaws.com
域加载网页吗?如果不是,这可能是 CORS 问题 docs.spring.io/spring-framework/docs/current/…
是的,来自同一个域..
【参考方案1】:
通过您的 T-Hub 帖子来到这里,没有足够的声誉来添加评论,否则会这样做。这是你可以尝试的;使用您的 EC2 的私有 ip(使用 ifconfig
查找)来托管 WebSocket 端点。
<websocket:message-broker application-destination-prefix="/app">
<websocket:stomp-endpoint path="/ws">
<websocket:sockjs/>
</websocket:stomp-endpoint>
<websocket:stomp-broker-relay prefix="/topic,/user"
relay-host="your-ec2-private-ip-addr" relay-port="80" heartbeat-send-interval="20000" heartbeat-receive-interval="20000"/>
</websocket:message-broker>
从以下方面获得帮助: Java Spring STOMP: Set broker IP
【讨论】:
它对我有用。在日志中,它在 msg DEBUG 下面重复:org.springframework.messaging.simp.stomp.StompEncoder - 编码 STOMP 命令=CONNECT headers=accept-version=[1.1,1.2], login=[guest], heart-beat=[20000 ,20000], passcode=[guest] DEBUG: org.springframework.messaging.simp.stomp.StompEncoder - 编码 STOMP 命令=CONNECT headers=accept-version=[1.1,1.2], login=[guest], heart- beat=[20000,20000],passcode=[guest] 信息:reactor.tcp.netty.NettyTcpClient - 已关闭:[id: 0x1c3f4225, /172.16.228.141:56670 :> /172.16.228.141:8080] 我找不到解决方案,所以最后我不得不切换到长轮询来代替 web socket。以上是关于websocket失败:WebSocket握手期间出错:意外响应代码:400的主要内容,如果未能解决你的问题,请参考以下文章
使用 Maven,WebSocket 连接失败:WebSocket 握手期间出错:意外响应代码:404
WebSocket 连接到“ws://localhost:8080/”失败:WebSocket 握手期间出错:意外响应代码:404
失败:WebSocket 握手期间出错:“Sec-WebSocket-Accept”标头值不正确
WebSocket 连接到“ws://chattestarpit.herokuapp.com/”失败:WebSocket 握手期间出错:意外响应代码:503
HTML5 / PHP WebSocket 连接失败:WebSocket 握手期间出错:意外响应代码:200
WebSocket 连接到“ws://.../socket.io/”失败:WebSocket 握手期间出错:net::ERR_CONNECTION_RESET