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替换成了空字符串‘’来达到去除的效果
GitHub 加速计划 / vu / vue
207.55 K
33.66 K
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:3 个月前 )
73486cb5 * chore: fix link broken Signed-off-by: snoppy <michaleli@foxmail.com> * Update packages/template-compiler/README.md [skip ci] --------- Signed-off-by: snoppy <michaleli@foxmail.com> Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 5 个月前
e428d891 Updated Browser Compatibility reference. The previous currently returns HTTP 404. 5 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐