javascript - GeoServer、OpenLayers3 getGetFeatureInfo 跨站点(不同方法)

标签 javascript apache iis openlayers-3 geoserver

我想我们都熟悉跨站问题,但以防万一: 我在端口 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 上托管网站,我应该选择什么?我不是在寻找简单的方法,而是在寻找正确的方法。

最佳答案

再见, 我认为你有两个主要选择:

  1. 对 GetFeatureInfo 使用 JSONP OutputFormat
  2. 使用代理(有一定保护)

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

一般情况下,2 更灵活,但我建议以某种方式限制人们可以使用此类代理执行的操作,以避免您的基础设施中出现黑洞。 在我们的webgis中MapStore (基于OL)我们用这个非常精益http-proxy我们开发的可以配置为仅传递某些请求(例如 getfeatureinfo),并且仅在需要时传递到某些服务器。

我的 0.02 欧元。

关于javascript - GeoServer、OpenLayers3 getGetFeatureInfo 跨站点(不同方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22570371/

相关文章:

javascript - 观察特定DIV的内容

javascript - 我在 Angular 2 中找不到我的服务路径

iis - 连接身份和应用程序池身份之间的区别

python - 如何停止超过配置的请求超时的 FastCGI 进程

asp.net - 从网络上的另一台计算机访问 iis localhost 路径

javascript - 当我浏览要上传的文件时如何自动获取文件名?

javascript - 将对象数组重新格式化为键数组数组

apache - 如何将 SCRIPT_URI 写入 Apache 的 header ?

apache:仅将 404 错误消息重定向到 httpd.conf 中的不同日志文件

apache - Shibboleth 忽略配置设置