¿Cuándo necesito usar un proxy con OpenLayers2?

8

¿Cuándo exactamente necesito usar un proxy con capas abiertas? He leído mucho sobre esto, pero parece que no puedo encontrar una respuesta definitiva. Preguntándome si esta es la ruta de mis problemas.

Por ejemplo, si tengo un servidor que ejecuta Geoserver (WFS) en el puerto 8080 y Apache (que sirve OpenLayers) en el puerto 80, ¿necesitaría usar un proxy?

Si los servidores están físicamente separados, ¿necesitaría usar proxy?

usuario8262
fuente

Respuestas:

8

Necesita un proxy si está haciendo una solicitud AJAX a una máquina y / o puerto que es diferente del que recibió su página web.

Por lo tanto, en los dos ejemplos anteriores, necesitará un proxy (en el servidor que sirve la página web) si desea realizar solicitudes de información de WMS o cualquier tipo de solicitud de WFS. Sin embargo, no necesita un proxy para solicitudes simples de getMap de WMS.

Ian Turton
fuente
Gracias, eso tiene sentido. ¡Tendré un violín con la configuración del proxy!
user8262
3

por favor lea aquí .

¿Por qué necesito un ProxyHost?

Debido a restricciones de seguridad en Javascript, no es posible recuperar información de dominios remotos a través de XMLHttpRequest.

Clases como WFS y GeoRSS usan XMLHTTPRequest para obtener sus datos. Si están consultando un servidor remoto (que no sea la máquina que aloja su página), debe instalar un script proxy en algún sitio web accesible en esa máquina. Vea a continuación cómo configurar su propio ProxyHost.

Si la variable OpenLayers.ProxyHost no está establecida en un host proxy válido, las solicitudes se envían directamente a los servidores remotos. En la mayoría de los casos, el resultado será una excepción de seguridad, aunque esta excepción a menudo ocurre en silencio.

Espero que te ayude...

Aragón
fuente
2

Cuando se desarrolló JavaScript por primera vez, no se imaginó que tendría un uso tan amplio y, por lo tanto, se hicieron muchas suposiciones durante su desarrollo, que se han vuelto problemáticas hoy en día.

Cuando Microsoft diseñó el XMLHttpRequesten su navegador Internet Explorer, fue diseñado con una gran limitación.

El XMLHttpRequestno le permite realizar una solicitud directamente a otro servidor. Incluso dos servidores que se ejecutan en la misma máquina, pero diferentes puertos tienen esta limitación.

Lo que debe hacer es tener un proxy cgi en su servidor web apache (puerto 80), y usar OpenLayers.ProxyHost para señalarlo.

El sitio OpenLayers tiene una respuesta a preguntas frecuentes para este problema :

¿Por qué necesito un ProxyHost?

Debido a restricciones de seguridad en Javascript, no es posible recuperar información de dominios remotos a través de XMLHttpRequest.

Clases como WFS y GeoRSS usan XMLHTTPRequest para obtener sus datos. Si están consultando un servidor remoto (que no sea la máquina que aloja su página), debe instalar un script proxy en algún sitio web accesible en esa máquina. Vea a continuación cómo configurar su propio ProxyHost.

Si la variable OpenLayers.ProxyHost no está establecida en un host proxy válido, las solicitudes se envían directamente a los servidores remotos. En la mayoría de los casos, el resultado será una excepción de seguridad, aunque esta excepción a menudo ocurre en silencio. ¿Cómo configuro un ProxyHost?

Un script de host proxy de ejemplo está disponible aquí: trunk / openlayers / examples / proxy.cgi

Para la configuración estándar de Apache, debe colocar proxy.cgi en su directorio / usr / lib / cgi-bin /.

Una vez que se ha instalado un script de host proxy, debe editar la variable OpenLayers.ProxyHost para que coincida con esa URL.

Dada la configuración estándar de Apache anterior:

OpenLayers.ProxyHost = "/cgi-bin/proxy.cgi?url=";

Si ha hecho algo como esto, debería poder visitar:

 http://YourDomain.example.com/cgi-bin/proxy.cgi

El contenido resultante en esa página debe ser el sitio web openlayers.org.

Si en su lugar obtiene un error 404, o el script proxy no está en la ubicación correcta o su servidor web no está configurado correctamente.

Después de haber copiado el archivo proxy a su servidor, no olvide editar la allowedHostsmatriz.


Aunque las respuestas existentes son bastante antiguas, creo que debe haber una respuesta exhaustiva, ya que esta pregunta se ha convertido en una pregunta canónica, y muchas otras están cerradas por duplicado. Este es mi intento de responder a esta pregunta, basado en otras respuestas que he escrito en este sitio.

Devdatta Tengshe
fuente