前端配置反向代理proxyTable

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

一、为什么要使用proxyTable

  1. 浏览器有同源策略,不允许跨域访问,所谓跨域就是(协议、域名、端口其中任何一个不同就是跨域)
  2. 在平时项目的开发环境中,经常会遇到跨域的问题。比如需要和某个后端同事进行本地联调,就需要用到反向代理来解决两台计算机之间的跨域问题。

二、如何使用proxyTable处理数据的函数和方法。

我们还是拿vue相关的项目举例(目前用的技术栈是vue),首先要找到根目录下config文件夹下的index.js文件。由于我们是在开发环境下使用,自然的是要配置在dev里面:

dev: {
    
    
    // Paths
    assetsSubDirectory: 'static',
    assetsPublicPath: '/',
    proxyTable: {
    
    
      '/': {
    
    
      	// target表示目标接口域名
        target: 'www.666.com', //举个例子具体要看后端给的
        // target: 'http://172.20.225.45:9033/api/zy/rental/house/web/',  //需要和哪个后端连接调试就在这里新增修改
        // target: 'http://192.168.209.123:9033/api/zy/rental/house/web/',
        changeOrigin: true // 是否跨域
      }
    },
    host: '0.0.0.0', // 本地访问
    // host: 'localhost',
    port: 8086,
    autoOpenBrowser: false,
    errorOverlay: true,
    notifyOnErrors: true,
    poll: false,

    devtool: 'cheap-module-eval-source-map',

    cacheBusting: true,

    cssSourceMap: true
  },

三、接口地址没有统一项目名的时候

如果后台返给我们前端的接口没有了统一的项目名如何处理呢?如下,先人为给接口地址前面加上一个自定义的项目名,再重写接口

//先人为给接口地址前面加上一个自定义的项目名
let someApi = '/api' + '/xx/xx';

dev: {
    
    
  ...
  proxyTable: {
    
    
    '/api': {
    
    
      target: 'http://www.abc.com',  //目标接口域名
      changeOrigin: true,  //是否跨域
      pathRewrite: {
    
    
        '^/api': '/'   //重写接口
      }
    }
  }
  ...
}

四、关于proxyTable的原理

同源策略是浏览器需要遵循的标准,而如果是服务器向服务器请求就无需遵循同源策略。vue-cli的proxyTable用的是http-proxy-middleware中间件,该中间件本质上是在本地开了一个服务器dev-server,所有的请求都通过这里转发出去,即把浏览器的发送请求代理转发到代理服务器上,再由代理服务器发送请求给目标服务器,从而解决跨域问题。
在这里插入图片描述
在这里插入图片描述
遇到跨域问题的场景有很多,不仅web端、小程序同样也有。解决方案也是多种多样,如jsonp、cors、websocket、nginx反向代理,也包括上面用到的node中间件代理等。实际的项目开发中,更多是使用代理来避免同源策略。

猜你喜欢

转载自blog.csdn.net/daishu_shu/article/details/125994633