• vue项目跨域问题的终极解决方案【原创】


    关于vue项目开发环境的跨域问题,网上搜索到的方案和解释竟然没有一个真正理解和解释清楚了的。本人做了各种测试全部整理清楚,觉得有必要和大家分享我得出的结论。

    方案一:axios的baseURL设置为全路径,无需使用proxy

    开发环境的时候,只用axios就可以解决跨域问题;不用在配置文件中配置 proxy之类的属性

    axios.default.baseURL=  http://xxxx;#即可
    
    //次域名必须是 全域名的绝对路径
    //不信的你试一试 

    方案二:使用proxy属性,不使用axios的baseURL

    可以完全不使用axios只用proxy实现,此时axios的baseURL必须是带域名的全路径

    //带pathRewrite的情况
    proxyTable: {
    '/api': { //必须以/开头 target: 'http://cmsapi.vote.cmstop.com', // 设置你调用的接口域名和端口号 别忘了加http changeOrigin: true, pathRewrite: { '^/api': '' } } }
    //不带pathRewrite情况
    proxyTable: {
          '/api': { //必须以/开头
            target: 'http://cmsapi.vote.cmstop.com', // 设置你调用的接口域名和端口号 别忘了加http
            changeOrigin: true//后面不使用reWrite
        } }
    
    

    1,如果添加了pathRewrite:{'^/api':"} ,那么请求接口url需要以/api/api开头

    第一个/api为了匹配proxy的配置,此时url的真实路径等价于 target+/api/api;

    由于使用了pathRewrite:{'^/api':"},此时url的真实等价于target+/api; 虽然路由上会带有2个api,不影响真实的url地址;

    2,如果没有添加pathRewrite:{'^/api':"},那么请求接口url需要以/api开头即可

    第一个/api仍然为了匹配proxy的配置,url的真实路径等价于 target+/api;此时路由上只有一个api,完全正确;

    方案三:axios的baseURL和proxy配合使用;

    此时axios的baseURL不能是带域名的全路径,

    service = axios.create({
      baseURL: '/api',  //process.env.BASE_API,
    })
    
    proxyTable: {
          '/api': {
            target: 'http://cmsapi.vote.cmstop.com', // 设置你调用的接口域名和端口号 别忘了加http
            changeOrigin: true,
            pathRewrite: {
              '^/api': '' // 这里理解成用‘/api’代替target里面的地址,后面组件中我们掉接口时直接用api代替
            }
          }
        }

    1,此时请求接口url需要以/api开头即可,真实请求地址就是target+/api

    虽然路由上会带有2个api,其中一个/api是由axios的baseURL添加的,跨域代理的时候又被pathRewrite去掉了,不影响真实的url地址;

    2,如果想省略前缀/api,解决方案

    使用axios的baseURL统一添加前缀,去匹配proxy的配置,不用配置pathRewrite属性;

    效果和方案二中的第二种情况一样;

    service = axios.create({
      baseURL: '/api',  //process.env.BASE_API,
    })
    
    proxyTable: {
          '/api': {
            target: 'http://cmsapi.vote.cmstop.com', // 设置你调用的接口域名和端口号 别忘了加http
            changeOrigin: true
          }
        }
  • 相关阅读:
    ABP PUT、DELETE请求错误405.0
    Visual Studio Code 通过 Chrome插件Type Script断点调试Angular 2
    Angular 报错 Can't bind to 'formGroup' since it isn't a known property of 'form'
    ABP 用swagger UI测试API报401无权限访问问题
    ABP .Net Core API和Angular前端APP集成部署
    ABP .Net Core API和Angular前端APP独立部署跨域问题(No Access-Control-Allow-Origin)
    Hosts文件实际应用 配置内部服务器提高访问效率和速度
    mysql-proxy实现读写分离
    mysql主从复制-linux版本
    nginx作反向代理,实现负载均衡
  • 原文地址:https://www.cnblogs.com/tkzc2013/p/13160009.html
Copyright © 2020-2023  润新知