# 跨域原理
浏览器同源策略:协议、域名和端口都相同是同源,浏览器会限制非同源请求读取响应结果。
本地开发环境通过 Vite 配置反向代理解决浏览器跨域问题,生产环境则是通过 nginx 配置反向代理 。
# vite.config.ts 配置代理
| // 写法 1 | |
| export default defineConfig(({ mode }: ConfigEnv): UserConfig => { | |
| const env = loadEnv(mode, process.cwd()) | |
| return { | |
| resolve: { | |
|             ... | |
| }, | |
| css: { | |
|             ... | |
| }, | |
| server: { | |
| host: '0.0.0.0', | |
| port: Number(env.VITE_APP_PORT), | |
| open: true, | |
|             // 反向代理解决跨域 | |
| proxy: { | |
| [env.VITE_APP_BASE_API]: { | |
| target: 'http://www.lixianghlong.cn', | |
| changeOrigin: true, | |
| rewrite: path => | |
|                     	// eg: localhost:3000/dev-api/users/me -> http://www.lixianglong.cn/users/me | |
| path.replace(new RegExp('^' + env.VITE_APP_BASE_API), ''), | |
| }, | |
|             } | |
|         } | |
|     } | |
| } | 
| // 写法 2 | |
| export default defineConfig({ | |
|     ... | |
| server: { | |
| host: '0.0.0.0', | |
| port: 8080, | |
| open: true, | |
| https: false, | |
| proxy: { | |
| '/api': { | |
| target: '要代理的地址', | |
| changeOrigin: true, | |
| ws: true, | |
| rewrite: (path: string) => path.replace(/^\/api/, ''), | |
| }, | |
| }, | |
|     } | |
| }) | 
表面肉眼看到的请求地址: http://localhost:3000/dev-api/api/v1/users/me
真实访问的代理目标地址: http://www.lixianglong.cn/api/v1/users/me
