vite 代理 websocket

发布于:2025-05-10 ⋅ 阅读:(8) ⋅ 点赞:(0)

🛡️一、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 构建中使用此代理机制,仅限开发阶段使用

网站公告

今日签到

点亮在社区的每一天
去签到