vue中 axios使用proxy代理,打包之后跨域

发布于 2022-09-11 21:05:40 字数 1468 浏览 26 评论 0

问题描述

接手一个别人的项目,使用的是vue3
在根目录下的 vue/config.js配置服务器代理

    // vue/config.js
    // webpack-dev-server 相关配置
    devServer: {
        open: true,
        // host: "0.0.0.0",
        port: 8080,
        // contentBase: path.resolve(__dirname, "public"),
        https: false,
        hotOnly: false,
        proxy: {
            "/api": {
                target: Url,  // 外部引入的url,连接的后端的服务器
                ws: false,
                changeOrigin: true,
                pathRewrite: {
                    '^/api': ''
                }
            }
        }
        //before: app => {}
    },

然后在fetch.js 生成 axios实例,并且引用代理

fetch.js
import axios from 'axios'
// 创建 axios 实例
const service = axios.create({
    baseURL: '/api', // 这里使用配置过的代理
    timeout: 10000 
});

这种情况在开发模式里,可以连接后端
但是npm run build 打包生成dist文件后,连接服务器则显示跨域
如图:

clipboard.png


后来 我用以前的老方法 在fetch.js文件里设置baseUrl

// fetch.js
let Url = require("../../public/projectConfig").Url
// 创建 axios 实例
const service = axios.create({
    baseURL: Url,
    timeout: 10000 // 请求超时时间
});

这种情况是可以连接到后端服务器的,并且打完包后的dist文件也可以连接后端服务器
后端出了一些bug,虽然没有了跨域的问题,但是后端的安全框架无法识别登陆状态,好像需要proxyTable什么的

求知:为什么使用proxy代理打包后反而形成了跨域,而老老实实写baseUrl却没有问题。 后端为什么识别不出登录状态

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

陌路黄昏 2022-09-18 21:05:40

反向代理 是开发时可能需要的 打包到生产是不用反向代理的 必须去掉 不去掉请求地址发生变化不符合同源策略肯定跨域

荒岛晴空 2022-09-18 21:05:40

本地代理是开发环境才会生效,打包为生产环境后会自动失效,也就是说上面的配置不需要去做调整,本身就是没问题的,之所以打包之后会出现跨域,是因为后台接口服务没有配置响应头的跨域机制,以java为例(response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, client_id, uuid, Authorization")),当然,如果后台服务本身设计就是为了安全不开放跨域访问,那可以将打包之后的前端代码放在nginx内,并设置反向代理到对应的接口服务即可

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文