Vite 反向代理
1. 面试题
Q: 如何在 Vite 开发环境中解决跨域问题?proxy 配置怎么写?
2. 核心解答
跨域 (CORS) 也适用于开发环境。虽然浏览器限制了 ajax 请求必须同源,但服务器之间的通讯不受限制。 Vite 基于 Node.js,可以开启一个 反向代理服务器 (Reverse Proxy Server)。
(1) 配置 server.proxy
在 vite.config.ts 中配置代理规则:
解释:
- 浏览器请求:
http://localhost:3000/api/users。 - Vite 拦截:发现
/api前缀。 - 转发给目标:
http://jsonplaceholder.typicode.com/users(因为 rewrite 移除了/api)。 - 收到响应:Vite 将响应转发给浏览器。
- 结果:浏览器以为是同一域下的请求,成功获取数据,没有跨域错误。
(2) 生产环境怎么办?
这个配置仅在开发环境有效。如果你构建打包 (npm run build) 后部署到 Nginx 上,你需要配置 Nginx 的反向代理规则,和这里的逻辑是一样的。
或者如果是同域部署 (Same Origin),就不需要代理了。
3. 面试加分项
Q: changeOrigin: true 是干嘛的?
有些后端服务器会检查请求头中的 Host 字段,以此来防止域名欺诈。如果 changeOrigin 为 false (默认),发送过去的 Host 头就是 localhost:3000。后端可能直接拒绝。设置为 true 后,代理服务器会将 Host 头修改为目标服务器的域名 (jsonplaceholder.typicode.com),让后端认为是一个合法的请求。
4. 总结
- Dev: Node Proxy (Reverse Proxy).
- Config: target, changeOrigin, rewrite.
- Build: Configure Nginx similarly.

