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

前端连接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连接恢复正常。

http://www.xdnf.cn/news/2549.html

相关文章:

  • GTC2025全球流量大会:领驭科技以AI云端之力,助力中国企业出海破浪前行
  • Typecho博客使用阿里云cdn和oss:handsome主题进阶版
  • Vue 中局部指令(directives)的用法详解
  • STM32 RTC配置
  • JavaScript 中的类(Class)语法
  • Vue 组件通信方式总览
  • OpenCV 图形API(70)图像与通道拼接函数-----创建一个图像或矩阵(GMat)的副本的操作函数copy()
  • Maven多模块工程版本管理:flatten-maven-plugin扁平化POM
  • 打火机检测数据集VOC+YOLO格式925张1类别
  • 使用POI和EasyExcel使用导入
  • 实战指南:搭建AIRIOT全场景智慧养老管理平台系统全流程解析
  • 2025系统架构师---基于规则的系统架构风格‌
  • 【硬件系统架构】哈佛架构
  • Linux 内核网络协议栈中的关键数据结构:inet_skb_parm 与 ip_options
  • 媒体查询使用
  • 《Go 语言高并发爬虫开发:淘宝商品 API 实时采集与 ETL 数据处理管道》
  • 无刷空心杯电机及机器人灵巧手的技术解析与发展趋势
  • 关系型数据库的SQL语句
  • Paramiko 完全指南
  • 2. 第一个网页:前端基础入门
  • MySQL 表的约束(二)
  • 数据结构*栈
  • 微信小程序连续多个特殊字符自动换行解决方法
  • DSP48E2 的 MAC模式功能仿真
  • C#与SVN的深度集成:实现版本控制自动化管理​
  • 【星海出品】K8S调度器leader
  • 如何验证二叉搜索树(BST):Java实现详解
  • C++ 可调用实体 (详解 一站式)
  • 我的HTTP和HTTPS
  • Mariadb 防火墙服务器和端口:mysql | 3306