【问题标题】:Spring Java servlet return incorrect user agentSpring Java servlet 返回不正确的用户代理
【发布时间】:2014-06-26 23:25:10
【问题描述】:

我正在尝试获取有关用户用于调用 API 的浏览器的信息。 我在网上搜索了一下,好像应该使用请求头中的“user-agent”。

代码:

@RequestMapping(value = "/headerTest", method = RequestMethod.GET)
public @ResponseBody DummyAPI dummyApi(
        @RequestHeader ("User-Agent") String userAgent,
        HttpServletRequest request,  HttpServletResponse response)
{

    System.out.println("User-Agent : " + userAgent);

    String browserName = request.getHeader("User-Agent");
    System.out.println("BrowserName : " + browserName);

    return "test";
}

但是,当我测试它时:

Firefox 给了我: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0!

Chrome 给了我: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36!

Safari 给我: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.76.4 (KHTML, like Gecko) Version/7.0.4 Safari/537.76.4!

这可能是什么问题?为什么标题会出错?

提前谢谢你!

【问题讨论】:

  • 你是否运行了一些插件来改变你的用户代理来欺骗它,却忘了你做了?用户代理由浏览器发送。如果 Java 出错了,那是因为浏览器发送错误。
  • 我认为这些用户代理字符串是真的,我在whatsmyuseragent.com 上检查了我的(我在 Windows 8.1 上使用 Chrome 35)我的用户代理似乎与您的 Chrome 用户代理非常相似(除了操作系统部分)字符串Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36。所以,不要被所有这些 Mozilla-Safari 单词等弄糊涂了。
  • 这是正确的,用户代理将向您提供有关浏览器的信息,其中包括的不仅仅是浏览器的名称。您可以使用 userAgent.contains("Firefox") 之类的内容搜索此用户代理字符串以检查您要查找的浏览器名称。

标签: java spring google-chrome firefox servlets


【解决方案1】:

标题是正确的,它们或您的应用程序没有任何问题。由于历史原因,它们包含大量数据,并且无法轻松更改以与旧的 Web 应用程序兼容。

来源和更多信息: http://webaim.org/blog/user-agent-string-history/

【讨论】:

  • 我明白了!感谢您的参考!
  • 这是我很长时间以来读过的最有趣的博文之一。
猜你喜欢
  • 1970-01-01
  • 2013-12-08
  • 2016-05-06
  • 1970-01-01
  • 1970-01-01
  • 2010-10-28
  • 2020-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多