2011-04-24 110 views
13

我正在使用JQuery向我自己的Web服务发出AJAX请求。我需要为HTTP-AJAX-Request设置或修改User-Agent HTTP-Header,我怎样才能以最简单的方式做到这一点?JQuery Ajax请求:更改用户代理

我尝试了一些用户提供的使用setRequestHeader方法来设置User-Agent的提示,但这不起作用。它实际上适用于其他新创建的标题(如X-Test-Header),但它不适用于User-Agent

谢谢!

+1

看到这个讨论http://forum.jquery.com/topic/jquery-specifying-user-agent-with-ajax – 2011-04-24 16:55:33

+0

看到我下面的评论,不适合我。 – theomega 2011-04-24 19:44:01

回答

26

这是根本不可能的,您不允许更改XMLHttpRequests的用户代理。我不知道这是否是有效的互联网浏览器,但W3C指定here

的setRequestHeader()方法

[...]

当setRequestHeader(头,值)被调用的方法,所述用户代理必须执行这些步骤: [...]

终止这些步骤,如果报头是以下标题之一不区分大小写匹配:

[...]

  • 的User-Agent
+2

2017更新:您链接的W3C TR规范已移至[this whatwg spec](https://xhr.spec.whatwg.org/#the-setrequestheader()-method),它引用了[禁止标题的此列表(https://fetch.spec.whatwg.org/#forbidden-header-name),它不包含'User-Agent'。 MDN [明确确认](https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_​​header_name)不再禁止“用户代理”。尽管Chrome仍然拒绝它,所以我认为你的建议还没有失效。 – mrec 2017-02-22 19:00:18

9

如果您使用的是jQuery,请在ajaxSetup中设置请求标头。

$.ajaxSetup({ 
    beforeSend: function(request) { 
    request.setRequestHeader("User-Agent","InsertUserAgentStringHere"); 
    } 
}); 
+0

你有试过吗?它不能使用JQuery 1.5.2和Firefox 4,用户代理仍然是默认的。在文档完成加载(document.ready)之后,我会在发出调用之前调用ajaxSetup。这是一个简单的json请求(不是jsonp) – theomega 2011-04-24 19:41:25

+0

这不适用于带有Mac的Chrome。总的来说,如果这“根本不可能”,这根本不起作用。 – Chris 2012-08-15 21:18:59

+6

适用于我的node.js应用程序,我可以不关心w3c的规则..你真棒 - 谢谢。 – 2013-01-23 23:52:38

5

嗯,你总是可以使用jQuery张贴到服务器端页面,然后又是能够修改User-Agent头,并且向jQuery直接访问的页面发出请求。