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

vite 代理 websocket

🛡️一、WebSocket 基本概念

名称全称含义使用场景
ws://WebSocket非加密的 WebSocket 连接开发环境、内网通信
wss://WebSocket Secure加密的 WebSocket 连接(基于 TLS/SSL)生产环境、公网通信

🛡️二、安全性对比

特性ws://wss://
数据是否加密是(通过 SSL/TLS)
是否防止中间人攻击
是否需要证书是(服务器需配置 SSL 证书)
是否适合公网使用不推荐推荐

🛡️三、协议底层差异

差异ws://wss://
协议基于 TCP 协议基于 TLS/SSL 加密通道上的 TCP 协议
握手握手过程是明文的握手过程被加密
端口默认端口:80默认端口:443

🛡️四、配置与使用

🧩4.1、Vite 整体结构配置文件说明(vite.config.ts 或 vite.config.js)

export default defineConfig({server: {open: true,proxy: {'socket/': {target: 'ws://ip:端口',ws: true,changeOrigin: true,cookieDomainRewrite: {'^xxx.xxx.xxx.xxx': 'localhost'},rewrite: (path) => path.replace(/^\socket\//, '')}}}
})

🧩 4.2、关键字段解释

🔍 server.open

  • 作用:启动开发服务器后自动打开浏览器页面。
  • 示例:
// ts
open: true // 启动项目时自动打开 http://localhost:3000(默认端口)

🔍 server.proxy

  • 作用:用于设置开发环境下的请求代理规则,解决跨域问题。这里的 ‘socket/’ 是匹配请求路径前缀。
  • ‘socket/’ 代理规则:
配置项说明
target请求要转发的目标服务器地址,这里是 ws://ip:端口,表示一个 WebSocket 地址
ws设置为 true 表示该代理支持 WebSocket 协议
changeOrigin是否更改请求头中的 origin 字段为 target 的地址,通常在跨域场景下设为 true
cookieDomainRewrite将响应中的 Cookie 域名重写,例如将 xxx.xxx.xxx.xxx 改成 localhost,便于本地调试使用
rewrite请求路径重写函数,用于去掉 /socket 前缀再发送到目标服务器

✅ 4.3、实际效果举例

/*Vite 开发服务器会按照代理规则处理:匹配路径 /socket/example去掉 /socket 前缀 → 得到 /example转发到目标地址:ws://ip:端口/example所有数据通过本地代理中转,绕过浏览器跨域限制
*/
const socket = new WebSocket('ws://localhost:3000/socket/example');

🧠4.4、为什么需要这个代理?

在开发过程中,前端运行在 localhost:3000,而后端 WebSocket 服务可能部署在远程服务器上
(如 ws://192.168.1.100:8080),直接连接会遇到 跨域问题(CORS)。使用代理可以:- 绕过浏览器跨域限制- 在本地开发环境中模拟真实网络行为- 更方便地进行测试和调试

🧠4.5、完整流程图示意

[前端] ws://localhost:3000/socket/example↓
[Vite Dev Server 代理][重写路径]/example↓
[转发到] ws://ip:端口/example

🧠4.6、建议

  • 如果你的后端启用了 HTTPS/WSS,建议将 target 改为 wss://…
  • 若生产环境也需代理,应使用 Nginx 或 API 网关来实现
  • 不推荐在 production 构建中使用此代理机制,仅限开发阶段使用
http://www.xdnf.cn/news/4654.html

相关文章:

  • 稳定性_李雅普诺夫——Lyapunov直接法
  • 网络靶场基础知识
  • 是更换Window资源管理器的时候了-> Files-community/Files
  • 涨薪技术|0到1学会性能测试第53课-Tomcat配置
  • Python中的re库详细用法与代码解析
  • 在Lua中使用轻量级userdata在C/C++之间传递数据和调用函数
  • 探讨关于智能体(Agent)结合 Dify、大语言模型(LLM)以及 Qwen-3 模型的项目或概念
  • C++-缺省参数
  • 如何在Jmeter中调用C程序?
  • 【软考-高级】【信息系统项目管理师】【论文基础】采购管理过程输入输出及工具技术的使用方法
  • 永久免费的小工具,内嵌微软接口
  • AWS LB target group 监听端口的增加 (TCP还是UDP)
  • Redis实现分布式获取全局唯一自增ID的案例。
  • Dify X 奇墨科技,让AI大模型从“巨头专属”变为“触手可及”
  • Windows系统下使用Kafka和Zookeeper,Python运行kafka(一)
  • 单片机嵌入式滤波算法库
  • 从颜料混色到网络安全:DH算法的跨界智慧
  • Java实现桶排序算法
  • 【Git】【commit】查看未推送的提交查看指定commit的修改内容合并不连续的commit
  • 【Ubuntu】安裝向日葵远程控制
  • 可观测性方案怎么选?SelectDB vs Elasticsearch vs ClickHouse
  • [逆向工程]什么是DLL重定向(十九)
  • 基于Stable Diffusion XL模型进行文本生成图像的训练
  • 《社交应用架构生存战:React Native与Flutter的部署容灾决胜法则》
  • k8s(11) — 探针和钩子
  • SpringBoot学生操行评分系统源码设计开发
  • C++函数传值与传引用对比分析
  • 课外活动:简单了解原生测试框架Unittest前置后置的逻辑
  • 录播课视觉包装与转化率提升指南
  • 【NextPilot日志移植】整体功能概要