在http://www.a.com/service.asmx上创建Web服务,并从http://www.b.com向其发送跨域ajax请求。检查Firebug中的标头,或Live HTTP标头或任何其他插件。
在请求标头中没有跟踪X请求的HTTP头字段。
但是,如果您向同一个域中的同一服务发送ajax请求(例如http://www.a.com/about),您将看到该头域。
为什么跨域ajax请求忽略X请求的头域?
更新:我知道JSONP调用本质上不是AJAX调用。因此,在JSONP调用中,您将看不到任何X-Requested-With头字段。
如果你使用jQuery来做你的ajax请求,它不会发送头X-Requested-With(HTTP_X_REQUESTED_WITH)= XMLHttpRequest,因为它是跨域。但是有2种方法来修复和发送标题:
选项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";
上面的第一行将避免错误“Origin不允许Access-Control-Allow-Origin”。第二行将避免错误“请求头字段X请求 – 访问控制允许头不允许。