OpenLayers Proxyhost 无法正常工作

Posted

技术标签:

【中文标题】OpenLayers Proxyhost 无法正常工作【英文标题】:OpenLayers Proxyhost is not working properly 【发布时间】:2012-12-05 09:53:14 【问题描述】:

正如http://trac.osgeo.org/openlayers/wiki/FrequentlyAskedQuestions#ProxyHost 中所说,我确实将 proxy.cgi 文件放在了文档所说的服务器中,并且在转到“http://mydomain.com/cgi-bin/proxy. cgi”。这意味着为服务器正确设置了代理。但是当我尝试在我的脚本中使用这个代理时,它不起作用。 我在脚本中输入了“OpenLayers.ProxyHost = "/cgi-bin/proxy.cgi?url=";”。以便可以使用代理。

我的代码在这里,但不起作用。

ainSelect = new OpenLayers.Control.WMSGetFeatureInfo(
                    url: 'http://ec2-23-22-12-137.compute-1.amazonaws.com:8080/geoserver/KCRE/wms',
                    title: 'Identify features by clicking',
                    layers: [lyrParcels],
                    queryVisible: true
                );
ainSelect.infoFormat = 'application/vnd.ogc.gml';
                ainSelect.events.register("getfeatureinfo", this, pickAINid);
                map.addControl(ainSelect);
                ainSelect.activate();

而pickAINid函数是:

function pickAINid(e) 
            //alert(e.features.length);
            if (e.features && e.features.length) 

                var val = e.features[0].attributes.ain;
                alert(val);
                //document.getElementById('roadId').value = val;
            
        

所以它应该在我点击地图时提醒我 AIN 号码。据我所知,e.features.length = 0。这意味着 WMSGetFeatureInfo 无法正常工作。

请注意我已经使用了这些层:[lyrParcels] 我在此之前创建了该层,这里没有给出代码。

还有一点。当我从本地运行此代码时,此代码运行良好。

谁能告诉我我做错了什么?是在“OpenLayers.ProxyHost = "/cgi-bin/proxy.cgi?url=";”这一行吗?

提前致谢。

问候 马布布尔哈克

【问题讨论】:

【参考方案1】:

在 proxy.cgi 文件的顶部有一个允许的主机列表(如下所示)。

allowedHosts = ['www.openlayers.org', 'openlayers.org', 
            'labs.metacarta.com', 'world.freemap.in', 
            'prototype.openmnnd.org', 'geo.openplans.org',
            'sigma.openplans.org', 'demo.opengeo.org',
            'www.openstreetmap.org', 'sample.azavea.com',
            'v2.suite.opengeo.org', 'v-swe.uni-muenster.de:8080', 
            'vmap0.tiles.osgeo.org', 'www.openrouteservice.org'] 

如果您不需要添加您正在联系的服务器的域(和端口,在您的情况下不是 80),在这种情况下:

ec2-23-22-12-137.compute-1.amazonaws.com:8080

如果这不是问题的根源,您能否提供一些来自 javascript 调试器的更多信息,例如当您尝试通过代理发出请求时显示任何错误或警告的 firebug。

更新

通过在您的服务器上测试您的代理,您似乎在网络内部与端口 8080 的连接存在问题。

这可以通过尝试 url 来测试

http://kleincom.com/cgi-bin/proxy.cgi?url=http://v-swe.uni-muenster.de:8080

http://kleincom.com/cgi-bin/proxy.cgi?url=http://labs.metacarta.com

metacarta url 工作正常,但 muenster url 因超时问题而失败。我会看看你的防火墙设置或类似设置。

【讨论】:

我已经在 cgi 脚本的 allowedHosts 变量中添加了域。我添加了 8080 端口 ec2-23-22-12-137.compute-1.amazonaws.com:8080 好的,那么您能否从 javascript 调试器中添加一些信息,以了解您请求信息时实际发生的情况? 我不会为你调试它!只需在上面的问题中发布任何相关的调试输出 当我点击地图时,它会发送 XMLHttpRequest,其 url 为:kleincom.com/cgi-bin/proxy.cgi?url= 当我点击地图时,它发送的 XMLHttpRequest 的 URL 是:“kleincom.com/cgi-bin/…....”它发送的请求和响应是:“发生了一些意外错误。错误文本是:" 但是如果我将 url "ec2-23-22-12-137.compute-1.amazonaws.com:8080/geoserver/KCRE/…..." 放在浏览器上,我会下载包含预期结果的 gml 文件。

以上是关于OpenLayers Proxyhost 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

使用 Openlayers 的 WFS 请求中出现奇怪的错误

Openlayers 无法从 RestfulAPI(节点)显示 GeoJSON Vectorlayer

无法使用 Jest 中的 openlayers 模块测试任何代码

无法以角度获取openlayers css

OpenLayers缓冲分析—重难点

创建 openlayers 文本