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/…....”它发送的请求和响应是:“发生了一些意外错误。错误文本是:以上是关于OpenLayers Proxyhost 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
使用 Openlayers 的 WFS 请求中出现奇怪的错误
Openlayers 无法从 RestfulAPI(节点)显示 GeoJSON Vectorlayer