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



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

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

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

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

更新:我知道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-Typen";

上面的第一行将避免错误"Origin is not allowed by Access-Control-Allow-Origin "。
第二行将避免错误"请求报头字段X-Requested-With不被Access-Control-Allow-Headers允许。"

相关内容

  • 没有找到相关文章

最新更新