在JavaScript设置一个请求头 [英] Set a request header in JavaScript

查看:192
本文介绍了在JavaScript设置一个请求头的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

看来我无法从JavaScript做一个AJAX调用使用XMLHtt prequest何时改变大多数请求头。请注意,当 request.setRequestHeader 已到后, request.open被称为() Gecko浏览器(请参阅<一href="http://ajaxpatterns.org/Talk:XMLHtt$p$pquest_Call">http://ajaxpatterns.org/Talk:XMLHtt$p$pquest_Call).当我设置的引用站点的,它不会设置(我看着使用萤火虫和篡改数据发送的请求标头)。当我设置的的User-Agent 的,它搞砸了AJAX调用完全。设置的接受内容类型的做工作,但是,难道我们从设置pvented $ P $的引用站点用户代理的在Firefox 3?

VAR请求=新XMLHtt prequest(); VAR路径=htt​​p://www.yahoo.com; request.onreadystatechange = state_change; request.open(GET,路径,真实); request.setRequestHeader(Referer的,http://www.google.com); //request.setRequestHeader("User-Agent,的Mozilla / 5.0); request.setRequestHeader(接受,text / plain的); request.setRequestHeader(内容类型,text / plain的); request.send(空);     功能state_change() { 如果(request.readyState == 4)   {// 4 =装   如果(request.status == 200)     {// 200 = OK     // ...我们code在这里...     警报('OK');     }   其他     {     警报(问题检索XML数据);     }   } }

解决方案

W3C规范的setrequestheader

简要几点:

  

如果请求头头了   已经被设定,则该新值   必须被级联到现有   使用U + 002C逗号后的价值   一个U + 0020空白分离。

     

UA可以给User-Agent头一个初始值,但必须允许作者追加值了。

但是 - 通过框架XHR jQuery中,他们不允许您更改用户代理或引用站点标题搜索后。最接近的事:

  //设置标题所以调用的脚本都知道,这是一个XMLHtt prequest
xhr.setRequestHeader(X-要求,用,XMLHtt prequest);
 

我倾向于认为你想要做的是什么在FF否认了安全策略的观点 - 如果你想通过一些自定义的引用站点键入头你总是可以做:

  xhr.setRequestHeader(X-ALT-Referer的','http://www.google.com');
 

It seems that I am unable to change most request headers from JavaScript when making an AJAX call using XMLHttpRequest. Note that when request.setRequestHeader has to be called after request.open() in Gecko browsers (see http://ajaxpatterns.org/Talk:XMLHttpRequest_Call). When I set the Referer, it doesn't get set (I looked at the request headers sent using Firebug and Tamper Data). When I set User-Agent, it messed up the AJAX call completely. Setting Accept and Content-Type does work, however. Are we prevented from setting Referer and User-Agent in Firefox 3?

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");
    }
  }
}

解决方案

W3C Spec on setrequestheader.

The brief points:

If the request header header had already been set, then the new value MUST be concatenated to the existing value using a U+002C COMMA followed by a U+0020 SPACE for separation.

UAs MAY give the User-Agent header an initial value, but MUST allow authors to append values to it.

However - After searching through the framework XHR in jQuery they don't allow you to change the User-Agent or Referer headers. The closest thing:

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

I'm leaning towards the opinion that what you want to do is being denied by a security policy in FF - if you want to pass some custom Referer type header you could always do:

xhr.setRequestHeader('X-Alt-Referer', 'http://www.google.com');

这篇关于在JavaScript设置一个请求头的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆