在 http://www.a.com/service.asmx 上创建一个网络服务,然后从 http://www.b.向其发送跨域ajax请求。 COM 即可。检查 Firebug 或实时HTTP标头中的标题,或者您希望的任何其他插件。
请求标头中没有 X-Requested-With HTTP标头字段的跟踪。
但是,如果您从同一个域向同一服务发送ajax请求(例如 http://www.a.com/about ),您将看到该标题字段。
为什么跨域ajax请求省略了 X-Requested-With 标头字段?
更新:我知道JSONP调用本质上不是AJAX调用。因此,在JSONP调用中,您将看不到任何 X-Requested-With 标题字段。
答案 0 :(得分:70)
如果您使用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";
上面的第一行将避免错误“Access-Control-Allow-Origin不允许原点。”
第二行将避免错误“请求标头字段X-Requested-With不允许使用Access-Control-Allow-Headers。”