Notas de jQuery Ajax
- Debido a las restricciones de seguridad del navegador, la mayoría de las solicitudes de Ajax están sujetas a la misma política de origen ; la solicitud no puede recuperar correctamente datos de un dominio, subdominio, puerto o protocolo diferente.
- Las solicitudes de script y JSONP no están sujetas a las mismas restricciones de política de origen.
Hay algunas formas de superar la barrera entre dominios :
Hay algunos complementos que ayudan con las solicitudes entre dominios :
¡Aviso!
La mejor manera de superar este problema es crear su propio proxy en el back-end, de modo que su proxy apunte a los servicios en otros dominios, porque en el back-end no existe la misma restricción de política de origen . Pero si no puede hacerlo en el back-end, preste atención a los siguientes consejos.
¡Advertencia!
El uso de proxies de terceros no es una práctica segura, ya que pueden realizar un seguimiento de sus datos, por lo que pueden usarse con información pública, pero nunca con datos privados.
Los ejemplos de código que se muestran a continuación usan jQuery.get () y jQuery.getJSON () , ambos son métodos abreviados de jQuery.ajax ()
CORS Anywhere
CORS Anywhere es un proxy node.js que agrega encabezados CORS a la solicitud proxy.
Para usar la API, simplemente prefija la URL con la URL de la API. (Admite https : consulte el repositorio de github )
Si desea habilitar automáticamente las solicitudes de dominio cruzado cuando sea necesario, use el siguiente fragmento:
$.ajaxPrefilter( function (options) {
if (options.crossDomain && jQuery.support.cors) {
var http = (window.location.protocol === 'http:' ? 'http:' : 'https:');
options.url = http + '//cors-anywhere.herokuapp.com/' + options.url;
//options.url = "http://cors.corsproxy.io/url=" + options.url;
}
});
$.get(
'http://en.wikipedia.org/wiki/Cross-origin_resource_sharing',
function (response) {
console.log("> ", response);
$("#viewer").html(response);
});
Cualquier origen
Cualquiera que sea el origen es un acceso jsonp de dominio cruzado . Esta es una alternativa de código abierto para anyorigin.com .
Para obtener los datos de google.com, puede usar este fragmento:
// It is good specify the charset you expect.
// You can use the charset you want instead of utf-8.
// See details for scriptCharset and contentType options:
// http://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings
$.ajaxSetup({
scriptCharset: "utf-8", //or "ISO-8859-1"
contentType: "application/json; charset=utf-8"
});
$.getJSON('http://whateverorigin.org/get?url=' +
encodeURIComponent('http://google.com') + '&callback=?',
function (data) {
console.log("> ", data);
//If the expected response is text/plain
$("#viewer").html(data.contents);
//If the expected response is JSON
//var response = $.parseJSON(data.contents);
});
Proxy CORS
CORS Proxy es un proxy simple node.js para habilitar la solicitud CORS para cualquier sitio web. Permite que el código javascript en su sitio acceda a recursos en otros dominios que normalmente estarían bloqueados debido a la política del mismo origen.
¿Como funciona? CORS Proxy aprovecha el uso compartido de recursos de origen cruzado, que es una característica que se agregó junto con HTML 5. Los servidores pueden especificar que desean que los navegadores permitan que otros sitios web soliciten los recursos que alojan. CORS Proxy es simplemente un proxy HTTP que agrega un encabezado a las respuestas que dicen "cualquiera puede solicitar esto".
Esta es otra forma de lograr el objetivo (ver www.corsproxy.com ). Todo lo que tiene que hacer es eliminar http: // y www. desde la URL que se está representando y anteponga la URL conwww.corsproxy.com/
$.get(
'http://www.corsproxy.com/' +
'en.wikipedia.org/wiki/Cross-origin_resource_sharing',
function (response) {
console.log("> ", response);
$("#viewer").html(response);
});
Navegador proxy CORS
Recientemente encontré este, involucra varias utilidades de Cross Origin Remote Sharing orientadas a la seguridad. Pero es una caja negra con Flash como backend.
Puede verlo en acción aquí: navegador proxy CORS
Obtenga el código fuente en GitHub: koto / cors-proxy-browser