微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Webpack 配置 proxy 代理解决跨域问题

1. 同源策略:https://www.cnblogs.com/twinkleG/p/15357210.html

2. CORS 跨域:https://www.cnblogs.com/twinkleG/p/15359409.html

3. 以上两个链接是个人对同源策略以及CORS跨域的一些浅薄理解,做项目遇到了跨域问题,

看了一些博主的理解,借鉴一下:https://juejin.cn/post/6978831126727131173【稀土掘金】,

同时也看了一些视频:https://www.bilibili.com/video/BV1e7411j7T5?p=37

  浏览器发送请求到非同源服务器,会导致跨域问题,而服务器与服务器之间的通信是不存在跨域问题的,因此我们在本地 npm run serve 搭建的服务器,先接收到我们的请求,之后由本地服务器转发请求到目标服务器即可获取资源,再将资源从本地服务器发送给浏览器,这是 vue.config.js 中配置 devServer 解决跨域的思路。

  proxy中,本地服务器拦截浏览器请求,由本地服务器转发给target值【目的服务器】。

module.exports = {
  devServer: {
    host: 'localhost',
    port: '8083',
    proxy: {
      '/api': {  // /api 表示拦截以/api开头的请求路径
        target: 'http:127.0.0.1:3000', // 跨域的域名
        changeOrigin: true, // 是否开启跨域
      }
    }
  }
}

  以上配置和下面这种配置效果是一致的:pathRewrite 路径重写,将 target 中 /api 变为空值。

module.exports = {
  devServer: {
    host: 'localhost',
    port: '8083',
    proxy: {
      '/api': {
        target: 'http:127.0.0.1:3000/api',
        changeOrigin: true,
        pathRewrite: {  // 重写路径
          '^/api': ''  // 把/api变为空字符
        }
      }
    }
  }
}

  当我们发送一个请求时,target 值会与请求URL进行拼接,这才是最终要请求的地址:

// axios请求
axios({
  method: 'get',
  url: '/api/newList'
}).then(res=>{})

  当拦截到以 /api 开头路径时,把设置的跨域域名与路径拼接就变为了 http:127.0.0.1:3000/api/newList

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐