小编典典

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

ajax

**http://www.a.com/service.asmx 上创建一个Web服务,并从 **http://www.b.com
向其发送跨域ajax请求。检查 FirebugLive HTTP Headers中的标题 ,或您想要的任何其他插件。

在请求标头中没有 X-Requested-With HTTP标头字段的踪迹。

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

为什么跨域Ajax请求省略了 X-Requested-With 标头字段?

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


阅读 629

收藏
2020-07-26

共1个答案

小编典典

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

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

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

选项2)告诉jQuery不要使用跨域默认值,因此它将X-Requested-With标头保留在ajax请求中:

$.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不允许起源”。
第二行将避免错误 “ Access-Control-Allow-Headers不允许使用请求标头字段X-Requested-With”。

2020-07-26