【问题标题】:Cross-Domain AJAX doesn't send X-Requested-With header跨域 AJAX 不发送 X-Requested-With 标头
【发布时间】:2011-12-31 02:41:33
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: ajax http-headers cross-domain cors


    【解决方案1】:

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

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

    $.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 is not allowed by Access-Control-Allow-Headers.”

    【讨论】:

    • 第一行还允许每个人对您的服务器进行跨域请求,这通常不是一个好主意。 “Access-Control-Allow-Origin”标头应根据白名单检查“Origin”标头来动态设置。
    猜你喜欢
    • 2013-08-12
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 2012-10-17
    • 2010-10-12
    相关资源
    最近更新 更多