javascript - peticiones - Configuración de Firefox para habilitar la solicitud Ajax de dominio cruzado
peticiones cross domain ajax (11)
¿Has intentado utilizar la solicitud de ajax de jQuery? A partir de la versión 1.3 jQuery admite ciertos tipos de solicitudes ajax de dominio cruzado.
Citando de la referencia anterior:
Nota: Todas las solicitudes remotas (no en el mismo dominio) se deben especificar como GET cuando ''script'' 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 se llaman al finalizar, pero no reciben un objeto XHR; las funciones beforeSend y dataFilter no son llamadas.
A partir de jQuery 1.2, puede cargar datos JSON ubicados en otro dominio si especifica una devolución de llamada JSONP, que se puede hacer de esta manera: "myurl? Callback =?". jQuery reemplaza automáticamente el? con el nombre correcto del método para llamar, llamando a su devolución de llamada especificada. O bien, si configura el tipo de datos en "jsonp", se agregará automáticamente una devolución de llamada a su solicitud de Ajax.
¿Qué tal 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.
Aquí está la cosa, no hay forma de deshabilitar "temporalmente" XMLHttpRequest de dominio cruzado, si puede deshabilitarlo temporalmente, entonces puede deshabilitarse 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 aquí es que si llama a una secuencia de comandos entre dominios, devuelve los resultados de JavaScript (JSON) que luego se pasan a una función en su extremo.
Aquí hay algunos ejemplos de código para ilustrar cómo puede verse desde la perspectiva del código 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 su código que recibe los datos y en el servidor que "maneja" el caso de devolución de llamada, aquí está el JavaScript del lado del cliente:
function myfunc(data) {
alert(data);
}
Y en el lado del servidor, aquí estoy dando un ejemplo de PHP, pero esto se puede hacer con la misma facilidad en Java o cualquiera que sea su tecnología de servidor:
<?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.
Estoy frente a esto desde el 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á la mejor discusión que he encontrado sobre el tema.
Intenté usar esa cosa de ''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
La forma manual de editar la configuración de Firefox es el camino a seguir, pero es un inconveniente cuando tienes que hacerlo a menudo.
En su lugar, puede instalar un complemento que lo hará por usted con un solo clic.
Uso CORS everywhere
, lo cual funciona muy bien para mí.
Aquí hay un enlace al instalador
Para los navegadores modernos, puede probar el siguiente enfoque:
https://developer.mozilla.org/en/HTTP_access_control
En resumen, debe agregar lo siguiente en el encabezado de respuesta del SERVER
(el siguiente permite el acceso desde foo.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 X-PINGOTHER
es el encabezado personalizado insertado por JavaScript, y debe diferir de un sitio a otro.
Si desea que cualquier sitio acceda a su servidor en Ajax, use *
lugar.
Editar:
Cuando respondí la pregunta por primera vez en 2009 , en realidad me encontré con el mismo problema y trabajé con la configuración del lado del servidor.
No había ningún complemento en FF o Chrome para entonces.
Sin embargo, ahora tenemos alternativas con el complemento del navegador, compruebe la respuesta de tsds
Para permitir el dominio cruzado:
- enter
about:config
- acepta ser cuidadoso
- ingrese
security.fileuri.strict_origin_policy
en la barra de búsqueda - cambiar a falso
Ahora puede cerrar la pestaña. Normalmente, ahora puede realizar una solicitud de dominio cruzado con esta configuración.
Mira here para más detalles.
Puedes ver mi complemento para Firefox. Permite cruzar dominios en la última versión de Firefox: addons.mozilla.org/en-US/firefox/addon/cross-domain-cors
Si simplemente no quiere perder su tiempo en cuestiones de dominios cruzados durante el desarrollo y las pruebas de su aplicación, puede usar el complemento Force CORS for FF.
ACTUALIZACIÓN: parece que este complemento ya no existe. Pero hay otra opción: esta extensión de Chrome
Utilicé Fiddler como un proxy. Fiddler redirige las llamadas de localhost a un servidor externo.
Configuré Firefox para usar el proxy manual (127.0.0.1 puerto 8888). Fiddler captura las llamadas y las redirige a otro servidor, utilizando filtros de URL.