当前位置: 首页 > news >正文

前端连接websocket服务报错 Unexpected response code: 301

前端连接websocket服务报错 Unexpected response code: 301

  • 直连测试
  • 301重定向
  • 修改nginx配置

websocket后端服务正常,监听正常,可以通过简单的前端代码进行连接,但是通过nginx反向代理后报错Error during WebSocket handshake: Unexpected response code: 301

直连测试

假设我的webosocket服务tcp监听端口为8082,服务端ip为192.168.10.3,通过这个简单的js程序,用浏览器打开,查看控制台,网络中的ws,可以看到是能正常连接的,返回状态码为101.

<script>
// 创建一个 WebSocket 实例
const socket = new WebSocket('ws://192.168.10.3:8082/ws');// 当 WebSocket 打开时,输出信息
socket.addEventListener('open', function (event) {console.log('WebSocket 连接已打开');
});// 当接收到消息时,输出数据
socket.addEventListener('message', function (event) {console.log('收到消息:', event.data);
});// 当 WebSocket 关闭时,输出信息
socket.addEventListener('close', function (event) {console.log('WebSocket 连接已关闭');
});// 当遇到错误时,输出错误信息
socket.addEventListener('error', function (event) {console.error('WebSocket 出现错误');
});</script>

301重定向

301 是永久重定向状态码,通常发生在:

  • WebSocket 连接请求的 URL 缺少尾部斜杠

  • Nginx 配置中有重写规则导致 WebSocket 请求被重定向

  • WebSocket 连接尝试使用 HTTP 但服务器期望 HTTPS(或反之)

修改nginx配置

原关于websocket代理配置片段如下

location /ws/ {proxy_pass http://192.168.10.3:8082/ws;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_set_header Host $host;proxy_cache_bypass $http_upgrade;
}

修改如下:

location /ws {proxy_pass http://192.168.10.3:8082/ws;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;# 以下为 WebSocket 特定配置proxy_read_timeout 60s;proxy_redirect off;
}

重新加载nginx配置

nginx -s reload

前端页面重新加载后ws连接恢复正常。

相关文章:

  • 31、简要描述Promise.all的用途
  • 生成对抗网络(Generative Adversarial Nets,GAN)
  • WebRTC SDK是什么?
  • 机器学习中的数据转换:关键步骤与最佳实践
  • 刀客独家 | 磁力引擎副总裁康乐兼任快手电商美妆跨境行业负责人
  • uniswap getTickAtSqrtPrice 方法解析
  • C语言教程(十八):C 语言共用体详解
  • 【原创】从s3桶将对象导入ES建立索引,以便快速查找文件
  • JavaScript-基础语法
  • [Spring] Seata详解
  • 数据要素如何驱动的新质IDC一体化运营体系发展?
  • 考研系列-计算机组成原理第七章、输入/输出系统
  • 项目上线流程梳理(Linux宝塔面板)
  • css网格布局Grid
  • 夜莺 v8.0.0-beta.10 部署
  • QT—布局管理器之BoxLayout篇
  • 解锁健康密码:养生的多维智慧
  • Python 正则表达式 re 包
  • 考研408-计算机组成原理冲刺考点(1-3章)
  • 使用 Vue3 + Webpack 和 Vue3 + Vite 实现微前端架构(基于 Qiankun)
  • 体坛联播|安切洛蒂预计执教巴西国家队,利拉德确诊跟腱撕裂
  • 在循环往复的拍摄中,重新发现世界
  • 幸福航空五一前三天航班取消:客服称目前是锁舱状态,无法确认何时恢复
  • 上海数学教育及数学科普专家陈永明去世,享年85岁
  • 第二艘国产大型邮轮爱达·花城号完成坞内起浮
  • 十四届全国人大常委会第十五次会议在京举行,审议民营经济促进法草案等