특정 사이트에서 프로그램을 다운로드하려고 할 때 페이지에서 현재 OS 에 맞는 버전의 프로그램을 추천해줄 때가 있다. Windows, Max, Ubuntu 등등 다양한 플랫폼에 맞는 버전의 프로그램들이 있는데, 이 사이트들은 어떻게 OS 를 감지하고 알맞는 버전을 추천해주는 걸까?
1. User-agent
HTTP 통신을 할 때 헤더 값에는 다양한 정보들이 포함된다. 그 중에는 HTTP 요청을 보내는 사용자의 식별 정보를 담고 있는 항목이 있는데, 바로 User-Agent 이다. User-Agent 는 request header 에 포함되는 string 값으로 요청을 보내는 디바이스의 application, operating system, vendor, browser version 등의 정보를 포함하고있다.
- 형식
header 에 포함되는 User-agent 의 형식은 다음과 같다.
User-Agent: <product> / <product-version> <comment>
<product> : product 식별자
<product-version> : product 버전 번호
<comment> : 추가적인 product 의 정보
각 product 와 버전의 뒤에 optional 하게 product 들의 추가정보가 기술되어 있다.
실제 크롬 브라우저에서의 예시는 다음과 같다.
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36
2. 브라우저 별 형식
MDN 에서 브라우저 별로 User-agent 의 형식을 정리해놓아서 대표적인 형식 예제와 설명을 아래에 정리했다.
- Firefox
파이어폭스 브라우저에서 사용하는 user-agent 형식이다. 아래의 4개의 부분으로 구성되어 있다.
Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion
1) Mozilla/5.0 : 대부분의 브라우저에 포함되는 토큰으로 접속한 브라우저가 Mozilla 에 호환된다는 의미이다.
2) (platform; rv:geckoversion) : platform 은 브라우저가 실행되고 있는 native platform (Windows, Max, Linux, Android, etc) 에 대한 설명이다. 만약 디바이스가 모바일 폰인 경우, Mobile 이라고 표시된다. rv:geckoversion 은 Gecko 의 버전을 의미하는 값이 들어간다.
3) Gecko/geckotrail : 해당 브라우저가 Gecko 기반임을 의미한다.
4) Firefox/firefoxversion : 해당 브라우저가 파이퍼폭스임을 의미하여, 버전이 같이 기술된다.
실제 예시는 다음과 같다.
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0
Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0
- Chrome
크롬은 파이어폭스와 유사하다. 추가적으로 호환성을 위해 'KHTML, like Gecko' 와 'Safari' 등이 추가된다.
실제 예시는 다음과 같다.
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
- Safari
사파리는 크롬과 아주 유사하다. 하지만 마지막에 Safari 정보가 위치하고 있으며, 모바일인 경우에는 Mobile 정보가 함께 기술된다.
Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1
- Internet Explorer
Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)
[Reference]
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Browser_detection_using_the_user_agent
'Computer Science > Network' 카테고리의 다른 글
[Network] SSL 암호화 (대칭키, 공개키, 개인키) (0) | 2022.11.05 |
---|---|
[Network] Browser 통신 과정 (0) | 2021.10.15 |
[Network] HTTP (Hyper text transfer protocol) (0) | 2021.10.13 |
[Network] TCP, UDP (0) | 2021.10.08 |
[Network] Internet (인터넷 네트워크 기본) (0) | 2021.10.06 |