1

我想我们都熟悉跨站点问题,但以防万一:我使用 OpenLayers3,端口 8080 上的 GeoServer 和端口 80 上的 Apache。我在地图上渲染了一些功能,单击时我想获取功能信息来自 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 cannot load localhost:8080/geoserver/Re... 。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'localhost' 不允许访问。

我在网上搜索并找到了不同的方法来处理这个问题。我在问我应该选择女巫的方式。已知的事实是:托管服务器将被拥有,Linux 或 Windows 未知(目前)。这也意味着我不知道是否会使用 apache 或 IIS,所以让我们保持打开状态。

我发现的选项是:

  • CORS
  • JSONP
  • apache上的代理
  • URL 重写 IIS 7

如果在 apache 或 IIS 上托管网站,我应该选择什么?我不是在寻找简单的方法,我在寻找正确的方法。

4

1 回答 1

1

Ciao,我认为您有两个主要选择:

  1. 对 GetFeatureInfo 使用 JSONP 输出格式
  2. 使用代理(有一些保护)

如果您正在开发特定的应用程序并且您知道您总是在使用 GeoServer 或支持 JSONP 的东西,我相信 1 作为一种解决方案是干净的并且实际上是更可取的恕我直言。它避免了不得不摆弄代理和最终的管理员。

在一般情况下 2 更灵活,尽管我建议以某种方式限制人们可以使用这种代理做什么,以避免在您的基础设施中出现黑洞。在我们的webgis MapStore(基于 OL)中,我们使用了我们开发的这个非常精简的 http-proxy,它可以配置为只允许传递某些请求(例如 getfeatureinfo),并且只在需要时传递给某些服务器。

我的 0.02 欧元。

于 2014-03-22T10:13:49.800 回答