当前位置:   article > 正文

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

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" //返回格式
      }
    })
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2.代理

proxy: {
  '/geoserver': {
    target: 'http://localhost:8080',//目标服务器地址
    changeOrigin: true
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

二、 等同于(第二种)

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

var wmsImageryProvider = new Cesium.WebMapServiceImageryProvider({
   url: "/geoserverApi/Cesium/wms",
   layers: "Cesium:sfdem",
   parameters: {
     transparent: true, //是否透明
     format: "image/jpeg" //返回格式
   }
 })
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2.代理

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

三、总结

以上两种方式都可以代理同一个服务地址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替换成了空字符串‘’来达到去除的效果
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号