将geoserver与cesium一起使用时出现privateNetworkClientServer错误

privateNetworkClientServer error when using geoserver with cesium

我有一个地理服务器通过 http 托管图像。我的客户站点使用 https。我一直在使用 openlayers 并且一切正常。现在我正在尝试转移到 cesiumjs,但我没有在 IE 或 Edge 中获得任何图像(不幸的是我无法测试其他浏览器)。如果使用 bing 地图,我可以在我的客户端中获取图像,因此客户端代码可以正常运行。从浏览器控制台我看到:

SEC7117:对 http://[myserver]:8080/geoserver/cite/wms?service=WMS&version=1.1.1&request=GetMap&styles=&format=image%2Fjpeg&layers=cite%3Abmpyramid&srs=EPSG%3A3857&bbox=195678.7924100496%2C156543.03392804041%2C234814.55089206248%2C195678.7924100496&width=256&height=256 的网络请求未成功。此 Internet Explorer 实例不具有以下功能:privateNetworkClientServer

和:

SEC7111:HTTPS 安全受到 http://[myserver]:8080/geoserver/cite/wms?service=WMS&version=1.1.1&request=GetMap&styles=&format=image%2Fjpeg&layers=cite%3Abmpyramid&srs=EPSG%3A3857&bbox=195678.7924100496%2C195678.7924100496%2C215246.6716510579%2C215246.6716510579&width=256&height=256

的威胁

网址很好;我可以 copy/paste 进入新的浏览器并取回磁贴。从开发工具的浏览器网络选项卡中,我可以看到没有传出图像请求。

有人知道解决这个问题的方法吗?

尽管有神秘的错误消息,但这似乎不是我想的 HTTP/HTTPS 问题;这是 WebGL/CesiumJS 特有的跨源资源共享 (CORS) 问题。总结在本页底部附近:https://cesiumjs.org/tutorials/Imagery-Layers-Tutorial/ .

基本上有两种选择。首先,您可以在地理服务器中启用 CORS。我确认这确实解决了我的开发环境中的问题。然而,这并不是我们在产品中的真正选择。

另一种选择是设置代理,而不是 cesium 直接请求图块,而是从您自己的网络服务器请求它们,然后您的网络服务器手动获取它们。走这条路时,你可以像这样修改你的铯:

layers.addImageryProvider(new Cesium.ArcGisMapServerImageryProvider({
    url : '//server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer',
    proxy : new Cesium.DefaultProxy('/proxy/')
}));