基于Cesium1.26地图API下的GeoServer2.9.0服务器跨域设置

遇到的问题:

 

  最近基于Cesium来做3D模型的地图开发,在访问自己发布的WMS服务之后,遇到了GeoServer跨域问题。

 

  调用这个WMS服务的时候,浏览器(我用Chrome)开发者工具报错:

 

控制台提示如下:

  Font from origin 'http://xxxxxxxxxxxxx' has been blocked from loading by Cross-Origin Resource Sharing policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access.

 

这是因为服务端不允许跨域访问所导致的问题。

 

解决方案:

 

1、下载官方的cors压缩包,解压得到两个jar包,两个jar包文件放入geoserver目录下web容器的类库文件夹中。

 

2、打开geoserver目录下web容器的中的xml配置文件。

 

3、添加过滤器代码和过滤器路由代码。

 

4、重启geoserver。

 

ps:如果目录中存在maven,需要在pom.xml中,添加一个依赖标签。

 

pss:为了服务大家,本人制作了压缩包

 

psss:经本人测试,这个跨域访问方法可以应用于大多数服务器,不仅仅局限于GeoServer

 

CORS(跨域资源共享)小课堂:

 

  CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能(IE浏览器不能低于IE10)。

 

  整个CORS通信过程,都是浏览器自动完成,不需要用户参与。浏览器一旦发现请求跨源,就会自动添加一些附加的头信息,但用户不会有感觉。

 

  因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。

  

  请求流程:

    1、在你发送任意请求时,浏览器会将CORS请求合并到http请求之中。具体来说,就是在头信息之中,增加一个Origin字段。

    

    2、上面的头信息中,Origin字段用来说明,本次请求来自哪个源(协议 + 域名 + 端口)。服务器根据这个值,决定是否同意这次请求。

 

    3、如果Origin指定的源,不在许可范围内,服务器会返回一个正常的HTTP回应。

 

    4.1、浏览器发现,这个回应的头信息没有包含Access-Control-Allow-Origin字段,就知道出错了,从而抛出一个错误,被XMLHttpRequestonerror回调函数捕获。

 

    4.2、如果Origin指定的域名在许可范围内,服务器返回的响应,会多出几个头信息字段。

    

 

    5、其中最重要的是Access-Control-Allow-Origin这个字段,这个字段规定了可以得到本资源的域,如果头信息有此字段,这个字段与客户端浏览器应该是同域的。

转载于:https://www.cnblogs.com/xianerwonder/p/5980196.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cesium 是一个用于构建基于 WebGL 的地理信息系统(GIS)应用程序的开源软件库。私有化部署 Cesium 服务器主要是将 Cesium 应用程序部署在自己的服务器上,而不是使用 Cesium 的在线服务。私有化部署可以提供更好的控制和安全性,并允许在内部网络环境中运行 Cesium 应用程序。 跨域问题是在运行 Cesium 应用程序时可能遇到的一种常见问题。跨域是指在不同域名或端口之间进行数据交换时的安全限制。由于安全原因,现代 Web 浏览器通常阻止来自不同域的资源的载或脚本的执行。 要解决 Cesium 跨域问题,可以采取以下几种方法: 1. 设置服务器HTTP响应头:在私有化部署的服务器上,可以通过设置HTTP响应头来允许特定的跨域请求。常见的设置是将 "Access-Control-Allow-Origin" 头设置为允许的域名,以允许特定的来源跨域请求。 2. 使用反向代理服务器:可以将 Cesium 服务器配置在某个反向代理服务器后面,使用反向代理服务器来处理跨域请求。反向代理服务器可以在服务器和客户端之间转发请求,并在响应中设置适当的跨域头信息。 3. JSONP:JSONP 是一种通过在前端动态生成脚本标签,从而绕过跨域限制的技术。可以通过在 Cesium 应用程序中使用 JSONP 请求来实现跨域数据交换。 4. WebSocket:WebSocket 是一种在客户端和服务器之间建立持久连接的通信协议。使用 WebSocket 可以避免跨域问题,并实现实时的双向通信。 总的来说,私有化部署 Cesium 服务器可以提供更高的控制和安全性,而跨域问题可以通过设置服务器响应头、使用反向代理、JSONP 或 WebSocket 等技术来解决。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值