vue+vite项目中跨域问题解决与跨域代理的两种方式原理详解


vue+vite项目中难免会碰到跨域的情况,那前端如何解决跨域呢?在这里我们以代理geoserver服务端地址http://localhost:8080/geoserver为例介绍前端解决跨域问题的两种方式。

一、第一种

1.请求URL为(/geoserver/Cesium/wms)

var wmsImageryProvider = new Cesium.WebMapServiceImageryProvider({
      url: "/geoserver/Cesium/wms",
      layers: "Cesium:sfdem",
      parameters: {
        transparent: true, //是否透明
        format: "image/jpeg" //返回格式
      }
    })

2.代理

proxy: {
  '/geoserver': {
    target: 'http://localhost:8080',//目标服务器地址
    changeOrigin: true
  }
}

二、 等同于(第二种)

1.请求url地址为(/geoserverApi/Cesium/wms)

var wmsImageryProvider = new Cesium.WebMapServiceImageryProvider({
   url: "/geoserverApi/Cesium/wms",
   layers: "Cesium:sfdem",
   parameters: {
     transparent: true, //是否透明
     format: "image/jpeg" //返回格式
   }
 })

2.代理

proxy: {
  '/geoserverApi': {
    target: 'http://localhost:8080/geoserver',//目标服务器地址
    changeOrigin: true,
    rewrite: (path) => path.replace(/^\/geoserverApi/, '')
  }
}

三、总结

以上两种方式都可以代理同一个服务地址http://localhost:8080/geoserver,授人以鱼不如授人以渔,代理原理详细介绍如下:

(1) target参数:相当于是在代理地址(geoserver或者geoserverApi)前面拼接target
代理后地址就是http://localhost:8080/geoserverhttp://localhost:8080/geoserver/geoserverApi

(2)changeOrigin参数:开启代理
在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题;

(3)rewrite参数:路径改写

  • 在第二种代理方式时,代理地址为geoserverApi,代理后就成了http://localhost:8080/geoserver/geoserverApi,那实际我们的服务地址是http://localhost:8080/geoserver,所以/geoserverApi这部分就是多余,我们就要把多余的部分去除了;
  • rewrite: (path) => path.replace(/^/geoserverApi/, ‘’)我们看这段去除代码实际上就是通过正则表达式把字符串/geoserverApi替换成了空字符串‘’来达到去除的效果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值