#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. Это одно из самых забавных сообщений в блоге, которые я читал за долгое время.