# 跨域原理

浏览器同源策略:协议、域名和端口都相同是同源,浏览器会限制非同源请求读取响应结果。

本地开发环境通过 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