Spring Java servlet возвращает неверный пользовательский агент

#java #spring #google-chrome #firefox #servlets

#java #spring #google-chrome #firefox #сервлеты

Вопрос:

Я пытаюсь получить информацию о том, какой браузер пользователь использовал для вызова 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, как 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, как Gecko) Версия / 7.0.4 Safari / 537.76.4!

В чем здесь может быть проблема? Почему заголовок может быть неправильным?

Заранее благодарю вас!

Комментарии:

1. Вы запустили какой-то аддон, который изменяет ваш пользовательский агент, чтобы подделать его, и забыли, что вы это сделали? Пользовательский агент отправляется браузером. Если Java ошибается, это потому, что браузер отправил его неправильно.

2. Я думаю, что эти строки пользовательского агента верны, я проверил мои на whatsmyuseragent.com (Я использую Chrome 35 в Windows 8.1) Похоже, что мой пользовательский агент очень похож на вашу строку пользовательского агента 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 и т. Д.

3. Это правильно, агент пользователя предоставит вам информацию о браузере, которая включает в себя гораздо больше, чем просто название браузера. Вы можете выполнить поиск в этой строке пользовательского агента, чтобы проверить имена браузеров, которые вы ищете, используя что-то вроде userAgent.contains("Firefox") .

Ответ №1:

Заголовки правильные, и в них или в вашем приложении нет ничего плохого. По историческим причинам они содержат много данных и не могут быть легко изменены для совместимости со старыми веб-приложениями.

источник и дополнительная информация: http://webaim.org/blog/user-agent-string-history /

Комментарии:

1. Я вижу! Спасибо за ссылку!

2. Это одно из самых забавных сообщений в блоге, которые я читал за долгое время.