在JavaScript中设置请求头

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (7)

在使用XMLHttpRequest进行AJAX调用时,似乎无法更改JavaScript中的大部分请求标头。请注意,何时request.setRequestHeader必须request.open()在Gecko浏览器中调用(请参阅http://ajaxpatterns.org/Talk:XMLHttpRequest_Call)。当我设置Referer时,它不会被设置(我查看了使用Firebug和Tamper Data发送的请求头文件)。当我设置User-Agent时,它完全混淆了AJAX调用。但是,设置接受和内容类型确实有效。我们是否阻止在Firefox 3中设置Referer和User-Agent?

var request = new XMLHttpRequest();
var path="http://www.yahoo.com";
request.onreadystatechange=state_change;

request.open("GET", path, true);
request.setRequestHeader("Referer", "http://www.google.com");
//request.setRequestHeader("User-Agent", "Mozilla/5.0");
request.setRequestHeader("Accept","text/plain");
request.setRequestHeader("Content-Type","text/plain");

request.send(null);
    function state_change()
{
if (request.readyState==4)
  {// 4 = "loaded"
  if (request.status==200)
    {// 200 = OK
    // ...our code here...
    alert('ok');
    }
  else
    {
    alert("Problem retrieving XML data");
    }
  }
}
提问于
用户回答回答于

关于setrequestheader的W3C规范

简要说明:

如果请求头已经被设置,那么新值必须使用U + 002C COMMA与U + 0020 SPACE分开,并连接到现有值。 UA可以给用户代理头一个初始值,但必须允许作者给它附加值。

但是 - 在jQuery中搜索框架XHR之后,他们不允许您更改User-Agent或Referer标头。最接近的事情:

// Set header so the called script knows that it's an XMLHttpRequest
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");

我倾向于认为你想做的事情被FF中的安全策略所拒绝 - 如果你想传递一些自定义Referer类型的头文件,你可以这样做:

xhr.setRequestHeader('X-Alt-Referer', 'http://www.google.com');
用户回答回答于

Mozilla的Bug参考:https://bugzilla.mozilla.org/show_bug.cgi?id=627942

如果标头对下列其中一个标头不区分大小写,则终止这些步骤:

Accept-Charset
Accept-Encoding
Access-Control-Request-Headers
Access-Control-Request-Method
Connection
Content-Length
Cookie
Cookie2
Date
DNT
Expect
Host
Keep-Alive
Origin
Referer
TE
Trailer
Transfer-Encoding
Upgrade
User-Agent
Via

来源:https//dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#dom-xmlhttprequest-setrequestheader

扫码关注云+社区