跨域AJAX不会发送X-Requested-With标头

http://www.a.com/service.asmx上创build一个Web服务,并从http://www.b.com发送一个跨域的Ajax请求。 检查Firebug中的头文件,或Live HTTP头文件中的头文件,或者您希望的任何其他插件。

请求头中没有跟踪X-Requested-With HTTP Header字段。

但是,如果您从相同的域(例如http://www.a.com/about )向同一个服务发送ajax请求,您将看到该标题字段。

为什么跨域ajax请求省略了X-Requested-With头域?

更新:我知道JSONP调用本质上不是AJAX调用。 因此,在JSONP调用中,您将看不到任何X-Requested-With标头字段。

如果您使用jQuery来执行您的ajax请求,它将不会发送头X-Requested-With(HTTP_X_REQUESTED_WITH)= XMLHttpRequest,因为它是跨域。 但有两种方法可以解决这个问题,并发送标题:

选项1)在ajax调用中手动设置标题:

$.ajax({ url: "http://your-url...", headers: {'X-Requested-With': 'XMLHttpRequest'} }); 

选项2)告诉jQuery不要使用跨域默认值,所以它会保持ajax请求中的X-Requested-With标题:

 $.ajax({ url: "http://your-url...", crossDomain: false }); 

但是有了这个,服务器必须允许这些头,然后服务器需要打印这些头:

 print "Access-Control-Allow-Origin: *\n"; print "Access-Control-Allow-Headers: X-Requested-With, Content-Type\n"; 

上面的第一行将避免错误“访问控制允许来源不允许来源”。
第二行将避免错误“请求标头字段X-Requested-With Access-Control-Allow-Headers不允许”。