🛡️一、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
- 作用:启动开发服务器后自动打开浏览器页面。
- 示例:
open: true
🔍 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、实际效果举例
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 构建中使用此代理机制,仅限开发阶段使用