我想我们都熟悉跨站问题,但以防万一: 我在端口 8080 上使用 OpenLayers3、GeoServer,在端口 80 上使用 Apache。我在 map 上渲染一些要素,然后单击我想从 WMS 获取要素信息。我在OpenLayers3示例中找到了代码:
var viewResolution = v.getResolution();
var url = wmsSource.getGetFeatureInfoUrl(
evt.coordinate, viewResolution, viewProjection,
{'INFO_FORMAT': 'application/json'});
if (url)
$.get(url, null, function(data)
{
});
我当然得到: XMLHttpRequest 无法加载 localhost:8080/geoserver/Re... 。请求的资源上不存在“Access-Control-Allow-Origin” header 。因此,不允许访问源“localhost”。
我在网上搜索并找到了不同的方法来处理这个问题。我问女巫我应该选择什么方式。已知的事实是:托管服务器将被拥有,Linux 或 Windows 未知(目前)。这也意味着我不知道是否会使用 apache 或 IIS,所以让我们保持开放状态。
我找到的选项是:
- CORS
- JSONP
- apache 上的代理
- URL 重写 IIS 7
如果在 apache 或 IIS 上托管网站,我应该选择什么?我不是在寻找简单的方法,而是在寻找正确的方法。
最佳答案
再见, 我认为你有两个主要选择:
- 对 GetFeatureInfo 使用 JSONP OutputFormat
- 使用代理(有一定保护)
我相信 1 作为一种解决方案是干净的,并且实际上是更可取的恕我直言,如果您正在开发特定的应用程序并且您知道您总是使用 GeoServer 或支持 JSONP 的东西。它避免了与代理和最终管理员的麻烦。
一般情况下,2 更灵活,但我建议以某种方式限制人们可以使用此类代理执行的操作,以避免您的基础设施中出现黑洞。 在我们的webgis中MapStore (基于OL)我们用这个非常精益http-proxy我们开发的可以配置为仅传递某些请求(例如 getfeatureinfo),并且仅在需要时传递到某些服务器。
我的 0.02 欧元。
关于javascript - GeoServer、OpenLayers3 getGetFeatureInfo 跨站点(不同方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22570371/