2009-03-20 21 views
47

Necesito temporalmente permitir el dominio cruzado XMLHttpRequest. Cambiar la configuración de seguridad de Firefox parece ser el camino a seguir. Pero lo intenté con this y this pero no funcionaron. ¿Alguien ha podido configurar esto antes? Gracias.Configuración de Firefox para habilitar la solicitud de ayax de dominio cruzado

+0

Si puede necesitar cambiar la configuración de seguridad de Firefox, ¿no podría usar un script de GreaseMonkey? –

+1

Pruébalo en Chrome: http://stackoverflow.com/questions/3102819/disable-same-origin-policy-in-chrome – AgA

+0

Prueba mi complemento de Firefox para habilitar el dominio cruzado con ajax aquí: https: // addons. mozilla.org/en-US/firefox/addon/cross-domain-cors/ –

Respuesta

21

Para los navegadores modernos, puede intentar el siguiente enfoque:

https://developer.mozilla.org/en/HTTP_access_control

En resumen, es necesario añadir lo siguiente en la cabecera de la respuesta SERVER (la siguiente permite el acceso defoo.example):

Access-Control-Allow-Origin: http://foo.example 
Access-Control-Allow-Methods: POST, GET, OPTIONS 
Access-Control-Allow-Headers: X-PINGOTHER 
Access-Control-Max-Age: 1728000 

Tenga en cuenta que el X-PINGOTHER es el encabezado personalizado que se inserta mediante JavaScript, y debe diferir del sitio para sentarse mi.

Si quiere que cualquier sitio acceda a su servidor en Ajax, use *.


Editar:

La primera vez que respondieron a la pregunta por , de hecho me dio en el mismo problema, y ​​trabajé alrededor de ella utilizando la configuración del lado del servidor.

No había ningún complemento en FF o Chrome para entonces.

Sin embargo, ahora tenemos alternativas usando el plugin lado del navegador, por favor, compruebe la respuesta de tsds

+1

Este es un gran recurso: http://enable-cors.org/ – Booker

+4

si entiendo correctamente, esto no resuelve el problema original si no puede cambiar el servidor – Aras

+1

Tenga en cuenta que 'Access-Control-Allow-Origin: * 'no funcionará si también desea utilizar la opción' withCredentials' de XHR para enviar encabezados de cookies. Necesita especificar un dominio específico en ese caso. – dmkc

9

¿Ha intentado utilizar la solicitud de jQuery ajax? A partir de la versión 1.3 jQuery admite ciertos tipos de solicitudes ajax de dominio cruzado.

Citando la referencia anterior:

Nota: Todas remoto (no en el mismo dominio) las solicitudes deben especificarse que se obtiene cuando 'guión' o 'jsonp' es el tipo de datos (porque carga el script usando una etiqueta de script DOM). Las opciones de Ajax que requieren un objeto XMLHttpRequest no están disponibles para estas solicitudes. Las funciones completas y de éxito son llamadas al finalizar, pero no reciben un objeto XHR; las funciones beforeSend y dataFilter no son llamadas a .

A partir de jQuery 1.2, puede cargar JSON datos ubicados en otro dominio si especifica una devolución de llamada JSONP, que puede ser hecho de esta manera: "?? Myurl devolución de llamada =". jQuery reemplaza automáticamente el? con el nombre del método correcto para llamar, llamando a su devolución de llamada especificada. O bien, si establece el tipo de datos en "jsonp" se agregará automáticamente una llamada a su solicitud Ajax .

+0

estamos usando esto para recuperar datos de json, pero esto es html que se incorpora a la página y es solo temporal, por lo que cambiar la configuración de Firefox debería ser el lo más simple de hacer – Pablote

+2

¿Por qué el voto a favor? Usar las capacidades de dominio cruzado de un marco es una respuesta razonable a esta pregunta. El hecho de que HTML era obligatorio no se mencionaba en la pregunta, solo en el comentario de mi respuesta. – tvanfosson

2

He intentado usar esa cosa 'UniversalBrowswerRead' también y no funcionó. Es posible que pueda agregar un encabezado 'permitir', pero no he intentado hacerlo todavía. Es bastante nuevo.

Puede encontrar más información here

1

¿Qué hay de usar algo como mod_proxy? Luego, se ve a su navegador como si las solicitudes fueran al mismo servidor, pero realmente se están reenviando a otro servidor.

7

Aquí está la cosa, no hay forma de desactivar "temporalmente" XMLHttpRequest entre dominios, si puede deshabilitarlo temporalmente, se puede deshabilitar permanentemente. Este es un problema bastante común en la programación de AJAX de hoy en día y generalmente se resuelve utilizando la técnica conocida como scripts de dominio cruzado.

La idea es que si llama a un script de dominio cruzado devuelve resultados de JavaScript (JSON) que luego se pasan a una función en su extremo.

Aquí hay un código de ejemplo para ilustrar como puede ser observada desde un código perspectiva JavaScript:

function request_some_data() { 
    var s = "http://my.document.url.com/my_data?p1=v1&p2=v2&callback=myfunc"; 

     try { 
     try{ 
      document.write("<scr"+"ipt type='text/javascript' src='"+s+"'></scr"+"ipt>"); 
     } 
     catch(e){ 
      var x = document.createElement("script"); 
      x.src = s; 
      document.getElementsByTagName("head")[0].appendChild(x); 
     } 
     } 
     catch (e) { 
     alert(e.message); 
     } 
    } 

A continuación, definir una función en el código que recibe los datos y en el servidor que "manejar" la caso de devolución de llamada, aquí está el JavaScript del lado cliente:

function myfunc(data) { 
    alert(data); 
} 

Y en el lado del servidor, aquí estoy dando un ejemplo PHP, pero esto se puede hacer con la misma facilidad en Java o lo que la historia de su lado del servidor la tecnología es:

<?php 
    if($_GET["callback"]) { 
    print($_GET["callback"] . "("); 
    } 
    /* place your JSON object code/logic here */ 
    if($_GET["callback"]) { 
    print(");"); 
    } 
?> 

Tenga en cuenta que lo que está generando en el servidor termina siendo algo de JavaScript que se ejecuta en el lado del cliente.

+16

'"

+4

Por supuesto que puede desactivarlo temporalmente. Por ejemplo, inicie Chrome con --disable-web-security. –

+0

@JosephLust, tenga en cuenta que se le preguntó/respondió un poco antes de que Chrom tuviera un uso generalizado. – Michael

2

estoy frente a esto desde file://. Me gustaría enviar consultas a dos servidores desde un archivo HTML local (un banco de pruebas).

Este caso particular no debería ser ningún problema de seguridad, pero solo Safari lo permite.

Aquí está el best discussion que he encontrado del problema.

+0

¡Gracias! Supongo que no volveré a probar en Chrome. – tomdemuyt

1

Utilicé Fiddler como proxy. Fiddler redirige las llamadas de localhost a un servidor externo.

Configuré Firefox para utilizar el proxy manual (127.0.0.1 puerto 8888). Fiddler captura las llamadas y las redirige a otro servidor, utilizando filtros de URL.

28

Si simplemente no quiere perder el tiempo en cuestiones de dominio cruzado durante el desarrollo y la prueba de su aplicación, puede utilizar el complemento Force CORS para FF.

ACTUALIZACIÓN: Parece que este complemento ya no existe. Pero hay otra opción: Chrome extension

+9

Forcecors es genial. Vale la pena mencionar que después de la instalación debe hacer clic en view => toolbars>> add-on bar. Luego, el botón cors se mostrará en la parte inferior derecha, haga clic en eso para habilitarlo. Descomprimí el xpi y veo que hay una función de alternar cuando se presiona un botón, pero nunca se ve el botón. – HMR

+5

"Vale la pena mencionar que después de la instalación debe hacer clic en ver => barras de herramientas => barra de complementos". Usted, señor, es un santo – NcAdams

+6

Parece que FF lo ha eliminado. – shashwat

-1

La forma manual de editar la configuración de Firefox es el camino a seguir, pero es un inconveniente cuando debe hacerlo con frecuencia.

En su lugar, puede instalar un complemento que lo hará por usted con un solo clic.

Yo uso CORS everywhere, que funciona muy bien para mí.

Aquí es a link to the installer

+0

Las respuestas que solo tienen enlaces a otros recursos generalmente se consideran malas, ya que pueden cambiar a tiempo. Agregue la parte más relevante en la respuesta en sí. – Qirel

0

Para permitir varios dominios:

  1. entrar about:config
  2. aceptar que tener cuidado
  3. entrar security.fileuri.strict_origin_policy en la barra de búsqueda
  4. cambio en false

Ahora puede cerrar la pestaña. Normalmente, ahora puede realizar una solicitud de dominio cruzado con esta configuración.

Ver here para más detalles.

Cuestiones relacionadas