Skip to content
croquiscom edited this page Aug 23, 2012 · 1 revision

User agent는 사용자를 대신하여 동작하는 소프트웨어를 말한다.

HTTP와 User-Agent 헤더

특히, HTTP에서는 요청을 보내는 클라이언트 소프트웨어(보통은 브라우저지만, 아닐 수도 있다) 정보를 "User-Agent" 헤더에 담아 보낸다. 따라서 이 헤더를 통해 브라우저 정보를 식별할 수 있다.

문제는 HTTP 스펙에서 이를 명확히 정의하지 않았고, 후발 브라우저가 기존 브라우저와 호환성이 있음을 표시하려고 하다 보니 굉장히 복잡해졌다. (서버에서 User-Agent를 보고 다른 결과를 보내주면, 후발 브라우저가 지원하는 기능임에도 불구하고, 서버가 인식하지 못해 기능이 적은 페이지를 보낼 수 있다.) 예를 들어 IE 초장기 헤더는 'Mozilla/1.22 (compatible; MSIE 2.0; Windows 95)'로, '난 실제로는 IE 2.0이지만, 호환성이 있으니 Mozilla로 취급해줘'라는 뜻이 된다.(History of the browser user-agent string 참고) 참고로 가장 최신인 Chrome은 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.46 Safari/535.11'를 User-Agent로 보낸다.

따라서 실제 브라우저를 판단하는 것은 굉장히 까다롭기 때문에(일부 브라우저는 User-Agent를 사용자가 설정할 수도 있다) 가급적 사용하지 않으면 좋다. User-Agent 보다는 각 기능별로 클라이언트쪽에서 JavaScript로 판단해서 다른 동작을 하게 하는 것이 좋다.

// 좋지 않음
var isIE = navigator.userAgent.toLowerCase().indexOf("msie")!=-1;
if (!isIE) { ... }

// 바람직
if (window.XMLHttpRequest) { ... }

전형적인 User-Agent

  • IE: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
  • FireFox: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0.1) Gecko/20100101 Firefox/8.0.1
  • Safari: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit/xxx.x (KHTML like Gecko) Safari/12x.x
  • Chrome: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.46 Safari/535.11

참고