【问题标题】:JQuery Ajax Request: Change User-AgentJQuery Ajax 请求:更改用户代理
【发布时间】:2011-04-24 16:52:55
【问题描述】:

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

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

【问题讨论】:

标签: jquery ajax user-agent


【解决方案1】:

这根本不可能,您不能更改 XMLHttpRequests 的用户代理。我不确定这对 Internet-Explorer 是否有效,但 w3c 指定 here:

setRequestHeader() 方法

[...]

当调用 setRequestHeader(header, value) 方法时,用户代理必须运行以下步骤: [...]

如果标头与以下标头之一不区分大小写,则终止这些步骤:

[...]

  • 用户代理

【讨论】:

【解决方案2】:

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

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

【讨论】:

  • 你试过了吗?它不适用于 JQuery 1.5.2 和 Firefox 4,用户代理仍然是默认的。在文档完全加载(document.ready)之后,我在发出调用之前调用 ajaxSetup。这是一个简单的 json-request(不是 jsonp)
  • 这在带有 Mac 的 Chrome 中不起作用。如果它“根本不可能”,我会说一般来说这根本行不通。
  • 在我的 node.js 应用程序中为我工作,在那里我不太关心 w3c 的规则。你太棒了 - 谢谢。
  • 修改标题根本不起作用,但是如果您尝试添加新标题,则此代码有效。
【解决方案3】:

好吧,你总是可以使用 jQuery 发布到服务器端页面,然后该页面能够修改 User-Agent 标头,并且还可以向 jQuery 直接访问的页面发出请求。

【讨论】:

    【解决方案4】:

    一种方法是覆盖window.navigator 对象的__defineGetter__ 方法中的本机代码。

    看看这个:

    window.navigator.__defineGetter__('userAgent', function () {
        return "___I'M A GHOST___";
    });
    

    在控制台前后运行navigator.userAgent进行检查。

    在 Chrome 中工作。我没有检查其他浏览器。

    您可以在此处阅读更多信息:https://www.codeproject.com/Tips/1036762/Mocking-userAgent-with-JavaScript

    【讨论】:

    • 任何人看到这个:请不要使用这个解决方案(这不是解决方案的错,但它已被弃用):“警告:这个特性被弃用,有利于使用对象初始化语法或Object.defineProperty() API。虽然此功能已被广泛实现,但由于遗留使用,它仅在 ECMAScript 规范中进行了描述。不应使用此方法,因为存在更好的替代方案。 (见MDN)。
    猜你喜欢
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 2017-11-09
    • 1970-01-01
    相关资源
    最近更新 更多