【问题标题】:It is possible to set the User-Agent header used by http in Angular2?可以在Angular2中设置http使用的User-Agent标头吗?
【发布时间】:2016-10-12 13:19:48
【问题描述】:

这不是世界末日,但它会是一个很高兴拥有

目前正在使用 Ionic 2 构建一个混合应用程序,我正在向服务器 API 发送请求。

我想让用户代理字符串报告应用程序和版本(以及平台),例如MyApp V1.0 (iOS)

目前我正在发送如下请求:

http.post(my_server_url, JSON.stringify(dataToSend), options)

选项对象构造为:

let options = {
    headers: myHeaders
};

将标题构造为:

let myHeaders = new Headers();
headers.append('Content-Type', 'application/json');
headers.append('User-Agent', 'MyApp V1.0 (iOS)');

用户代理是使用平台特定数据构建的,以上只是本问题的直接字符串。

请求按预期工作,服务器接收到数据并采取相应措施。服务器发送适当的请求,并得到适当的处理。但是,当我检查实际发送的标头时,用户代理不是我设置的。

例如,在 iPhone 上,我看到以下用户代理(通过 Safari 开发人员工具和服务器日志进行检查):

Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko)

这基于正在使用的包装 webview。因此,我猜测有一些机制阻止我覆盖用户代理。

作为同一个应用程序的一部分,我正在上传文件并为此使用cordova file transfer plugin。我为该传输设置了标头(不使用 Angular http),并且服务器日志中正确报告了用户代理。

因此,正如问题所述,有没有办法使用 Angular http 设置自定义 User-Agent 标头?

【问题讨论】:

    标签: angular http-headers


    【解决方案1】:

    浏览器不允许覆盖用户代理标头。您可以安装浏览器扩展程序,但允许这样做。

    另见JQuery Ajax Request: Change User-Agent

    【讨论】:

    • 不幸的是,这无济于事,因为这是一个混合应用程序,使用 Ionic 2(因此是 cordova)创建,它被编译为要安装在目标设备上的本机应用程序,在这种情况下是 iOS和安卓。因此浏览器插件不适用。我假设您的答案基本上是网络浏览器(包括网络视图),禁用设置用户代理。
    • 好的,我想我会接受这个答案,因为它本质上是正确的 - 网络视图不允许我更改用户代理,并且可以按设置回答问题。但是,我现在已经找到了如何让 Cordova 覆盖它,这可能超出了设定的问题。
    • 我错误地专注于 Angular 而不是 cordova。 This helped
    猜你喜欢
    • 2014-05-03
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    相关资源
    最近更新 更多