问题描述
WebSocket connection to ‘ws://localhost:8888/MetroCity/ws/endpointChat’ failed: Error during WebSocket handshake: Unexpected response code: 403
官方文档
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html
问题分析
- WebSocket 设置为不允许跨域。
- 服务器/代理服务器不支持WebSocket
解决方案
JAVA
在registry.addEndpoint("/websocket")添加一句setAllowedOrigins("*")
服务器设置
在http里添加
map $http_upgrade $connection_upgrade{
default upgrade;
'' close;
}
在server里添加
server {
listen 80;
location / {
proxy_pass http://web;
proxy_http_version 1.1; #Nginx在与Node后端通信时使用HTTP/1.1,是WebSockets所必需的
proxy_set_header Origin '';
proxy_set_header Upgrade $http_upgrade; #Nginx响应升级请求,当浏览器想要使用WebSocket时,该请求由HTTP启动
proxy_set_header Connection "$connection_upgrade";
}
}