Proxy是CesiumJS用于管理网络代理的模块。它可以让你自定义、控制请求中的URL、数据、甚至可以用于CDN缓存等。在应对网络安全、性能优化、域名代理等方面有很大的用处。
我们可以通过下面的方式使用Proxy
var viewer = new Cesium.Viewer('cesiumContainer', {
// ...
proxy: new Cesium.DefaultProxy('/proxy/')
// ...
});
上面的例子将会使用默认代理模块并设置了一个代理子目录。当我们指定的地址不支持CORS或者浏览器跨域访问时,Cesium将会通过这个代理来获取请求并将请求的响应返回给我们。
我们同时也可以创建我们自己的代理:
var proxies = {
'/abc': new Cesium.DefaultProxy('/proxy/')
// ...
}
var viewer = new Cesium.Viewer('cesiumContainer', {
// ...
proxies: proxies
// ...
});
这将会创建一个代理,将所有访问/abc
的请求代理到/proxy/
目录下。
如果我们希望访问一个不同于/
路径下的根目录,我们也可以通过as property来指定它:
var terrainProxy = new Cesium.DefaultProxy('/terrain/');
terrainProxy.as = "/arcgis-terrain/";
var viewer = new Cesium.Viewer('cesiumContainer', {
// ...
terrainProvider : new Cesium.ArcGisImageServerTerrainProvider({
url : 'https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer',
proxy : terrainProxy
})
// ...
});
在这个例子中,我们将来自ArcGIS服务器的地形服务代理在了/terrain
路径下,并且将其重命名到/arcgis-terrain
。
CesiumJS为我们提供了一个非常方便的工具箱,来创建网络代理。下面的代码片段展示了如何创建一个名为customProxy
的代理:
var customProxy = new Cesium.DefaultProxy('/my-proxy');
var resource = new Cesium.Resource({
url: 'http://example.com/file.jpg',
proxy: customProxy
});
resource.fetchImage().then(function(image) {
console.log('Fetch image successfully.');
}).otherwise(function(error) {
console.log(error);
});
在上面的代码中,我们创建了一个使用http://example.com/file.jpg
作为URL的Cesium资源,它将使用/my-proxy
作为代理。
Object
如果你希望为CesiumJS中多个资源创建代理,你可以将此选项设置为一个键值对,其中键为资源路径,值为代理对象。
如:
var proxies = {
'/abc': new Cesium.DefaultProxy('/proxy/')
// ...
}
var viewer = new Cesium.Viewer('cesiumContainer', {
// ...
proxies: proxies
// ...
});
Cesium.Proxy
如果代理只用于单个ID,可以将其作为此属性传递。
如:
var proxy = new Cesium.DefaultProxy('/proxy/');
var resource = Cesium.Resource.fromUrl(url, {
proxy: proxy
});
proxyUri
- 要设置的默认代理URI设置默认代理URI。这将绑定到CesiumJS的所有资源请求中。当我们使用代理时,URL中的路径/proxy
将用proxyUri
取代。默认为/proxy/
。
Cesium.Proxy.setDefaultProxy('/myproxy/');
string
获取默认代理URI。
var proxyUri = Cesium.Proxy.getDefaultProxy();