【问题标题】:Sending AJAX request with headers发送带有标头的 AJAX 请求
【发布时间】:2011-10-01 16:10:20
【问题描述】:

在 David Flanagan 的《JavaScript: The Definitive Guide, 5th Edition》一书中说:在发送 AJAX 请求之前,您必须发送请求标头。

在跨浏览器支持的范围内,我需要这样做吗?

request.setRequestHeader("User-Agent", "XMLHttpRequest");
request.setRequestHeader("Accept-Language", "en");
request.setRequestHeader("If-Modified-Since", lastRequestTime.toString()); 

【问题讨论】:

    标签: javascript ajax cross-browser http-headers


    【解决方案1】:

    向 jQuery 寻求指导:

    http://code.jquery.com/jquery-latest.js

    专门搜索“X-Requested-With”。您不需要设置“用户代理”。不过,您可能希望将“X-Requested-With”设置为“XMLHttpRequest”。

    似乎有很多人试图重新实现 jQuery 而不查看 jQuery 或 DoJo 或 MooTools 或任何其他 JS 框架的源代码。使用来源,卢克。或者只是使用该框架并构建一个有用的应用程序,而不是将解决的问题作为一项学术练习来重新解决。

    查看dailyjs的这一系列博客文章,他们从头开始构建框架:

    http://dailyjs.com/tags.html#lmaf

    【讨论】:

    • 我正在完成我对 JavaScript 的学习,我想要彻底。或者,我将切换到 jQuery,但暂时知道答案会很好。谢谢。
    • 如果我将“X-Requested-With”设置为“XMLHttpRequest”,我会失去跨浏览器支持吗?
    • 标头对浏览器支持的影响不如对服务器支持的影响。请参阅@HoLyVieR 的回答,其中讨论了兼容性含义。
    【解决方案2】:

    对于最后 2 个标头,它们对于浏览器兼容性根本不是强制性的。这些标头用作偏好指示(Accept-Language)和内容优化(If-Modified-Since)。

    request.setRequestHeader("Accept-Language", "en");
    request.setRequestHeader("If-Modified-Since", lastRequestTime.toString()); 
    

    第一个标头在服务器端用于检测查询是从 AJAX 完成还是只是导航完成。较旧的浏览器默认可能不会设置此标头,因此如果您的服务器依赖于设置此标头,您可能会失去浏览器兼容性。如果您的服务器不依赖设置此标头,则如果未设置,您将不会失去任何浏览器兼容性。

    request.setRequestHeader("X-Requested-With", "XMLHttpRequest");
    

    请注意,第一个标头应该是 X-Requested-With 而不是 User-Agent

    【讨论】:

      猜你喜欢
      • 2016-11-10
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-03
      • 2013-01-29
      • 2015-02-22
      • 1970-01-01
      相关资源
      最近更新 更多