在http://www.a.com/service.asmx上创建一个Web服务,并从http://www.b向其发送跨域ajax请求。 com。检查 Firebug 或 Live HTTP Headers 中的 header ,或您希望的任何其他插件。
请求 header 中没有任何 X-Requested-With HTTP header 字段的痕迹。
但是,如果您从同一域(例如 http://www.a.com/about)向同一服务发送 ajax 请求,您将看到该 header 字段。
为什么跨域ajax请求时省略了X-Requested-With头域?
更新:我知道 JSONP 调用本质上不是 AJAX 调用。因此,您在 JSONP 调用中不会看到任何 X-Requested-With header 字段。
请您参考如下方法:
如果您使用 jQuery 执行 ajax 请求,它不会发送 header X-Requested-With (HTTP_X_REQUESTED_WITH) = XMLHttpRequest,因为它是跨域的。但有两种方法可以解决此问题并发送 header :
选项 1)在 ajax 调用中手动设置 header :
$.ajax({
url: "http://your-url...",
headers: {'X-Requested-With': 'XMLHttpRequest'}
});
选项 2)告诉 jQuery 不要使用跨域默认值,因此它将在 ajax 请求中保留 X-Requested-With header :
$.ajax({
url: "http://your-url...",
crossDomain: false
});
但是这样,服务器必须允许这些 header ,然后服务器需要打印这些 header :
print "Access-Control-Allow-Origin: *\n";
print "Access-Control-Allow-Headers: X-Requested-With, Content-Type\n";
上面的第一行将避免错误“Access-Control-Allow-Origin 不允许来源。”
第二行将避免错误“Access-Control-Allow-Headers 不允许请求 header 字段 X-Requested-With。”