Протокол HTTP предоставляет атрибут заголовка запроса , называемый User-Agent , который клиент (здесь веб-браузер) заполняет с помощью строка, идентифицирующая марку браузера, версию и операционную систему. Как и все элементы заголовка HTTP, эта информация может быть «подделана» или изменена для различных целей (например, различными шлюзами конфиденциальности на стороне клиента и т. Д.), Но обычно она относительно надежна.
Пример такой строки User-Agent (здесь для браузера FireFox, версия 3.5, работающей под Windows XP)
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5
Эта информация, наряду с другими атрибутами из заголовка, может запрашиваться принимающим приложением. Хотя специфика варьируется от одного языка / фреймворка к следующему, могут из этих языков / фреймворков представлять простую объектную модель, которая отражает различные объекты, связанные с протоколом HTTP. В случае заголовка http это обычно происходит из объекта «Запрос» (может быть назван по-другому), поэтому доступ к User-Agent может выглядеть примерно так:
ClientBrowser = Request.Header("User-Agent")
или, возможно,
ClientBrowser = HttpHeader.UserAgent
Редактировать : В случае C # / ASP.NET (позднее редактирование вопроса):
ClientBrowser = Request.ServerVariables("HTTP_USER_AGENT")
Кроме того, хотя у вас может возникнуть желание использовать эту информацию напрямую, вы также можете полагаться на различные библиотеки, которые инкапсулируют детали парсинга [очень многих версий] строк User-Agent для выяснения конкретный веб-браузер и даже особые формы javascript, которые должен отправлять такой клиент.