본문 바로가기

Computer Science/Network

[Network] HTTP Header User-Agent

반응형

특정 사이트에서 프로그램을 다운로드하려고 할 때 페이지에서 현재 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://velog.io/@ggong/User-agent-%EC%A0%95%ED%99%95%ED%95%98%EA%B2%8C-%ED%95%B4%EC%84%9D%ED%95%98%EA%B8%B0

 

User-agent 정확하게 해석하기

user agent는 HTTP 요청을 보내는 디바이스와 브라우저 등 사용자 소프트웨어의 식별 정보를 담고 있는 request header의 한 종류이다. 임의로 수정될 수 없는 값이고, 보통 HTTP 요청 에러가 발생했을 때

velog.io

- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent

 

User-Agent - HTTP | MDN

The User-Agent request header is a characteristic string that lets servers and network peers identify the application, operating system, vendor, and/or version of the requesting user agent.

developer.mozilla.org

- https://developer.mozilla.org/en-US/docs/Web/HTTP/Browser_detection_using_the_user_agent

 

Browser detection using the user agent - HTTP | MDN

Serving different Web pages or services to different browsers is usually a bad idea. The Web is meant to be accessible to everyone, regardless of which browser or device they're using. There are ways to develop your website to progressively enhance itself

developer.mozilla.org

 

반응형