2012-01-11 9 views
7

que estoy recibiendo este error JavaScript¿Alguna forma de superar Access-Control-Allow-Origin para el desarrollo en mi propio servidor?

XMLHttpRequest no puede cargar http://foo.bar.no/API/map_tools/clean_addresses/check. El origen http://foo.bar.no:9294 no está permitido por Access-Control-Allow-Origin.

Todo esto en el mismo dominio y en el mismo servidor, pero mi proyecto de JavaScript está alojado en un script de servidor independiente que agrupa automáticamente el JavaScript y sus dependencias en un solo archivo.

¿Cómo puedo superar esta restricción mientras desarrollo?


He intentado permitir que se conecte mi script de servidor de JavaScript. Este es el resultado de un enrollamiento a la url:

 
HTTP/1.1 200 OK 
Date: Wed, 11 Jan 2012 09:05:14 GMT 
Server: Apache/2.2.16 (Debian) 
Access-Control-Allow-Origin: http://foo.bar.no:9294 
Vary: Accept-Encoding 
Content-Length: 70 
Content-Type: text/plain 

array(1) { 
    ["q"]=> 
    string(31) "map_tools/clean_addresses/check" 
} 

Y aún obtengo el mismo error exacto que pegué anteriormente. ¿Por qué Chrome todavía se niega a conectarse a la maldita URL cuando está obviamente permitido?

+0

Las reglas para la determinación de un 'Access-Control-Allow-origen controlado violación son bastante estrictas: ninguna diferencia antes de la primera barra inclinada, incluyendo el puerto, el protocolo (HTTP vs. HTTPS) , y el subdominio, frustrarán una solicitud tradicional de AJAX basada en XHR ([artículo bueno] (http://encosia.com/using-cors-to-access-asp-net-services-across-domains/) en Encosia) –

+0

Sí, sentí eso. ¿Hay alguna manera de que pueda poner mi navegador en el "Modo de desarrollo" o algo donde cerrará el% ¤ # @ mientras estoy desarrollando? Cualquier navegador de Windows haría – Hubro

+0

Utilizaría JSONP o un proxy para solicitar otras URL de dominio. El artículo propone una alternativa usando el estándar CORS para eludirlo. –

Respuesta

2

Aceptar lo he descubierto. Estaba buscando una solución simple y rápida ya que solo necesito las solicitudes de dominio cruzado para fines de desarrollo. Resulta que solo tuve que configurar ambos

header("Access-Control-Allow-Origin: http://foo.bar.no:9294"); 
header("Access-Control-Allow-Credentials: true"); 

En mi script PHP en Apache. Luego, en mi código JavaScript:

# Set jQuery ajax to use 'withCredentials' globally 
$.ajaxSetup({ 
    xhrFields: { 
     withCredentials: true 
    } 
}); 

Y eso hizo el truco

1

Utilice las capacidades de proxy inverso de su servidor web para proxy http://foo.bar.no/API/map_tools/clean_addresses/check a http://foo.bar.no:9294/API/map_tools/clean_addresses/check.

tanto, como se utiliza Apache, se debe añadir algo así como

<Proxy *> 
      Order allow,deny 
      allow from all 
    </Proxy> 

    ProxyPass /API/map_tools/ http://foo.bar.no:9294/API/map_tools/ 
    ProxyPassReverse /API/map_tools/ http://foo.bar.no:9294/API/map_tools/ 

a su configuración de host virtual

+0

No entendí nada de eso, lo siento – Hubro

+0

¿Qué servidor web usas para el desarrollo? –

+0

El servidor: 80 es Apache, pero el: 9294 es un script de nodo – Hubro

1

Puede moverse por las restricciones de seguridad de seguridad entre dominios en cromo iniciándolo con la bandera en la web de seguridad --disable.

E.g. (En OS X):

open /Applications/Google\ Chrome.app/ --args --disable-web-security 
+1

Me tomó un tiempo lograr que esto funcione. Parece que los procesos de Chrome en Windows no quieren morir, incluso después de rechazar específicamente que Chrome se ejecute en segundo plano. Mientras los procesos se estén ejecutando, iniciar el archivo ejecutable de Chrome solo abre una nueva ventana debajo de los procesos existentes, por lo que esto solo funcionó después de cerrar completamente Chrome utilizando el administrador de tareas. Esto también significó que perdí todas las pestañas abiertas ... El menú "Recientemente cerrado" incluso se ha ido. – Hubro

Cuestiones relacionadas