Cree un servicio web en http://www.a.com/service.asmx y envíele una solicitud ajax de dominios cruzados desde http://www.b.com . Verifica los encabezados en Firebug , o en Live HTTP Headers , o cualquier otro plugin que desees.
No hay ningún rastro del campo X-Requested-With Heist Header entre los encabezados de solicitud.
Sin embargo, si envía una solicitud ajax al mismo servicio desde el mismo dominio (por ejemplo, http://www.a.com/about ), verá ese campo de encabezado.
¿Por qué se omite el campo del encabezado X-Requested-With para las solicitudes ajax de dominios cruzados?
Actualización: sé que las llamadas JSONP no son llamadas AJAX en la naturaleza. Por lo tanto, no verá ningún campo de encabezado X-Requerido-Con , en llamadas JSONP.
Si está utilizando jQuery para hacer su solicitud de ajax, no enviará el encabezado X-Requerido-Con (HTTP_X_REQUESTED_WITH) = XMLHttpRequest, porque es de dominio cruzado. Pero hay 2 formas de arreglar esto y enviar el encabezado:
Opción 1) Configure manualmente el encabezado en la llamada ajax:
$.ajax({ url: "http://your-url...", headers: {'X-Requested-With': 'XMLHttpRequest'} });
Opción 2) Indique a jQuery que no use los valores predeterminados entre dominios, por lo que mantendrá el encabezado X-Requerido-Con en la solicitud ajax:
$.ajax({ url: "http://your-url...", crossDomain: false });
Pero con esto, el servidor debe permitir esos encabezados, entonces el servidor necesita imprimir esos encabezados:
print "Access-Control-Allow-Origin: *\n"; print "Access-Control-Allow-Headers: X-Requested-With, Content-Type\n";
La primera línea anterior evitará el error “Origen no permitido por Access-Control-Allow-Origin”.
La segunda línea evitará el error “Solicitar campo de encabezado X-Solicitado-Con no permitido por Access-Control-Allow-Headers”.