Cross-Domain AJAX no envía X-Requested-With header

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”.