Подтвердить что ты не робот

Является ли обнаружение/обнюхивание пользовательского агента на стороне сервера?

Обнаружение пользовательского агента на стороне клиента известно, что оно плохое и обескуражен в пользу обнаружения функций. Однако также плохо ли реагировать по-разному на основе входящего поля пользовательского агента в HTTP-запросе?

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

4b9b3361

Ответ 1

Я думаю, это зависит от вашей мотивации. Например, в мобильном веб-секторе то, что вы пытаетесь сделать, это предоставить пользователю что-то, что выглядит разумно на их платформе. Зачем беспокоиться о том, что пользователь-агент сообщает об этом, когда это чисто для их собственной выгоды? Если они пойдут на попытку обмануть вас другим агентом-агентом, то это единственный человек, который страдает. Основная проблема, конечно же, ложные срабатывания; это не совсем достоверно.

Я следую аргументу о том, что вы не должны полагаться на него как таковое, но мобильные разработчики подвергаются атаке из общих общих операторов вроде этого. Да, есть хорошие альтернативы, но через каждый браузер, который вы можете себе представить, эта информация может быть действительно полезной в какой-то момент, когда определенность начинает ухудшаться.

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

Обнаружение агента пользователя считается плохим, когда есть лучшие альтернативы, но, безусловно, нет вреда в том, чтобы включать его в процесс обнаружения, который изящно деформируется.

Проблема, с которой я сталкиваюсь со всем процессом, заключается в том, что мы увлечены предоставлением пользователю что-то разумное, но никогда, похоже, не считаем приемлемым спросить, когда вы не уверены. Если вы не уверены в пользовательском агенте, почему бы не спросить один раз и сохранить? Вы можете использовать пользовательский агент в качестве ориентира.

Итак, чтобы завершить мои мысли, по существу заголовок user-agent недостоверен, поэтому на нем полагаться. Это не означает, что вы не можете извлечь из него ценную информацию, где более надежные варианты оставляют вас в неопределенном состоянии. В общем, неправильно делать вывод, что это плохо. Это просто то, что вы делаете с этой информацией, которая делает ее плохой или нет.

Update

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

Если это единственная переменная, возможно, она может работать, но редко бывает, что единственное, что вы меняете, это изображения. Я не хочу обнаруживать запрос, потому что Я хочу, чтобы клиент обслуживал когерентное решение. Это означает, что я подал им страницу, которая заставляет их запрашивать правильные ресурсы. Эта страница дает одно согласованное решение для всех интегрированных ресурсов. Все варианты этого документа работают вместе для определенного вида.

Я считаю, что вероятность того, что строка пользовательского агента изменит среднюю точку зрения, настолько тонка, что это не стоит беспокоиться. Однако принятие этого принципа также уменьшает количество раз, которое необходимо для обнаружения браузера/платформы, что может быть полезным только. Это позволяет вам более легко переключать представления на клиенте. Если клиент говорит, что на самом деле вы неправильно поняли, я планшет не телефон, как вы его исправляете? Вы обслуживаете пользователя лучшей страницы, иначе вам нужно будет подделывать заголовки для ваших запросов изображения... ужасная идея. Не используйте строку user-agent для обслуживания общих ресурсов, например изображений.

Потенциальные улучшения

Идентификация платформы - очень активная область современных разработок в Интернете. Поскольку вычисления становятся все более распространенными, а платформы меняются гораздо шире, наша потребность в понимании платформ, которые мы обслуживаем, увеличивается. Я думаю, что общее решение этой проблемы в нынешних условиях будет падать на отпечаток пальца и статистический анализ.

Рассмотрим это приложение - akinator.com - Обратите внимание, что статистический анализ из огромного набора разреженных данных является досадно точным. В ограниченной среде (набор конфигураций браузера) вы можете себе представить, что мы могли бы спросить у клиента несколько вопросов. Затем мы выполняем статистический анализ ответа в некотором n-мерном пространстве признаков. Использование пользовательского агента в качестве измерения этого пространства будет полезно и самоограничено в зависимости от результатов, которые вы найдете. Если он в значительной степени неточен, тогда он увидит большой разброс, и сумма стоимости, которую вы получите от него, будет лимитирована.

Конечно, ваша способность извлекать любую ценность из этой статистической модели требует от вас возможности получить некоторые проверенные истины. Это может быть, например, запуск тестового набора JavaScript для обнаружения возможностей js на стороне клиента или, действительно, неопределенности, вы можете попросить пользователя рассказать вам, что такое их платформа.


Для дальнейшего чтения я приведу вас к этой статье Mozilla

https://developer.mozilla.org/en/Browser_detection_using_the_user_agent

Сегодня поиск этих строк - единственный способ узнать, что устройство работает на мобильном устройстве (например, планшете), прежде чем обслуживать HTML.

Ответ 2

Это зависит. Используя пользовательский агент в качестве единственного сигнала для ветвления логики вашего уровня сервера код в лучшем случае сомнительный и небезопасный, но он работает для определения возможностей рота определенных классов браузера и обслуживания контента в соответствии с их потребностями, когда поставщик ванили поставляется.

Сценарий, который вы нарисовали, является прекрасной иллюстрацией этого. Попытка обнаружить мобильные браузеры и уменьшить масштаб содержимого, которое вы отправляете им на уровне сервера, вполне уместно, потому что вы пытаетесь адаптировать пользовательский интерфейс для удовлетворения своих потребностей лучше (например, путем предоставления меньших изображений и лучшего потока контента для соответствия в пределах ограничений меньшего экрана), балансируя их с потребностями вашего сервера (отправляя меньшие изображения, тем самым создавая меньшую нагрузку и меньшую пропускную способность по линии). Эта стратегия просто нуждается в уточнении.

Существует несколько принципов проектирования, которые вы должны всегда соблюдать, чтобы ваша практика обнаружения пользовательского агента не считалась вашей компанией сомнительной:

  • Всегда предоставляйте возможность просматривать полную версию вашего сайта и соответственно планировать профиль нагрузки. В противном случае вы попытаетесь обойти это, изменив свой агент.

  • Всегда четко определяйте изменения содержимого вашего сайта при создании модального представления. Это приведет к устранению любых FUD, связанных с изменениями, которые вы могли или не могли сделать.

  • Всегда указывайте пути к альтернативным версиям вашего сайта. Например, используйте что-то вроде http://mobile.example.org для переноса людей на мобильную версию, что делает предположение на уровне дизайна, что когда этот путь запрашивается, он был явно задан вашей аудиторией.

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

  • Избегайте злоупотреблений и ручного перенаправления. Например, не блокируйте их рекламой большого рекламного объявления для вашего мобильного приложения, когда вы обнаружите, что они запускают iOS. (По общему признанию, это мое домашнее животное.)

  • Никогда не ограничивайте доступ к областям сайта на основе пользовательского агента (вместо этого вместо этого строго предостерегайте пользователей о том, что не будет работать, если они уйдут с рельсов и разработают вашу политику поддержки вокруг него). Например, многие из нас с любовью вспоминают, как меняют наши агенты на сайтах, "которые лучше всего работают в Internet Explorer", запрещая все другие браузеры. Вы не должны становиться еще одним примером этой плохой практики, если ее можно избежать.

Вкратце: предоставление правильного пользовательского агента является решением пользователя.. Вы можете использовать это, чтобы определить опыт по умолчанию для пользователей, которые предпочитают запускать своих клиентов с простой ванилью или те, которые не знают все лучше. Цель здесь состоит в том, чтобы вознаградить ваших пользователей за то, что они не предоставляют ложного агента пользователя, предоставляя им нужные им параметры и желаемый опыт, одновременно балансируя их потребности с вашими собственными. Все, что выходит за рамки этого, заставит их отказаться, и как таковое должно считаться крайне сомнительным.

Вы можете, конечно, попытаться обнаружить браузер другими способами, но это все еще область открытых исследований. Возможности браузера и отпечатки пальцев меняются по мере того, как они конкурируют за функции, а попытки играть в догонялки для оптимизации производительности часто в настоящее время неразрешимы.

Я согласен с этим ответом на использование статистического анализа, поэтому не поймите меня неправильно здесь. Но, как кто-то, кто активно работает в этой области, я могу сказать вам, что нет волшебной пули, которая даст вам совершенную классификационную определенность. Эвристика, однако, может и поможет вам более эффективно балансировать нагрузку, и с этой целью стратегии опроса браузеров могут и могут быть использованы для вас, как только вы четко определили приемлемую скорость для ошибки.

Ответ 3

В сценарии "стандартный браузер" это неплохо, но это ненадежно, так как многие браузеры предлагают пользователю какую-либо конфигурационную опцию/плагин/что бы изменить пользовательский агент.

В такой ситуации я бы реализовал нечто похожее на facebook - они обнаруживают на основе UA (и, возможно, другие вещи, например, "анализ отпечатков пальцев" ), следует ли перенаправить на версию mobbile (т.е. http://m.facebook.com/...) или нет (т.е. http://www.facebook.com...). В то же время они предлагают URL param m2w, который переопределяет этот механизм перенаправления.

В зависимости от мобильной несущей может случиться также, что у них есть определенный прокси-кэш, поддерживающий контент, который на самом деле масштабирует/копирует изображения "на лету" и появляется на вашем конце как "нормальный" borwser...

Думая о сценариях за пределами браузера... например, если вы обслуживаете определенный протокол (например, WebDAV), это может быть единственным вариантом, чтобы иметь какое-то "поведение на платформе" (например, разница между OS X и Windows).