사용자 에이전트 (User Agent)
사용자 에이전트 혹은 사용자 에이전트 스트링(User Agent String)이라 불립니다. 웹에서는 웹브라우저가 사용자를 대신하여 OS, 버전, 기기, 웹 브라우저 등과 같은 사용자 식별 정보를 User-Agent HTTP 헤더에 일정한 구조로 담고 있습니다.
1. UA String 존재 이유
이런 개인 식별 정보가 왜 필요한지에 대해 알기 위해서는 웹 브라우저 동작방식에 대한 이해가 필요합니다. 웹 페이지 접속 시 사용자 에이전트라는 웹 헤더의 정보를 통해서 그 플랫폼에 맞는 페이지로 연결해 주기 때문입니다.
화면 비율이 맞지 않은 경우 이미지가 깨져서 나오기도하기 때문에 각 사용자의 환경에 최적으로 보여주기 위해서 만들어진 것입니다. 이전에 HTML로 표준화되기 전에 다양한 엔진으로 기반한 브라우저가 많아 OS, 버전에 따른 동작 차이 및 버그와 호환성 문제가 있었습니다. 이전에는 브라우저마다 사용 가능한 기능, 지원범위가 달랐기 때문에 호환성 문제가 가장 중요했습니다. 각각의 웹 브라우저가 자체엔진을 사용했으나 개발 및 유지보수 비용으로 현재에는 크롬의 기반의 블링크 엔진을 가져다가 쓰고 있어 대부분이 유사한 기능을 갖습니다.
즉, 각 브라우저 버전과 엔진을 확인하여 브라우저별 최적화하기 위해 사용했으나 현재에는 엔진을 개발하지 않고 가져다가 쓰기 때문에 기기 구분 및 OS 확인하는 용도로 더 활용하고 있습니다.
그렇다면 이 UA를 보고 어떤 정보를 얻을 수 있을까요? 그러기 위해서는 구조를 먼저 알아야 합니다.
2. 구조
먼저 기본구조와 각 브라우저 별 예시를 넣었습니다.
2.1 기본 구조
Mozilla/5.0 (운영체제 정보) 브라우저 / 버전
1) 브라우저
주요 구분자는 굵게 하며 구분함
브라우저명 | UA Examples | 브라우저 |
Chrome | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36 | Chrome 51 Blink engine |
Microsoft Edge | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.59 | Edge 91/ Blink engine |
Safari | 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 | Mobile Safari13.1.1 Webkit engine |
Internet Explorer | Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0) | IE Mobil/9.0 Trident engine |
Firefox | Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:108.0) Gecko/20100101 Firefox/108.0 | Firefox1.08 Gecko engine |
Opera | Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50 | Opera9.5 Gecko engine |
Firefox는 게코엔진으로 돌아가기 때문에 UA가 짧습니다.
이외 Whale 과 같은 다른 브라우저들은 크롬 기반이기 때문에 Chrome UA의 브라우저 정보에 스트링을 포함하고 있습니다.
2) Platform
브라우저가 실행되는 운영체제 환경(window, mac, linux와 같은 OS , 모바일기기), 그리고 모바일인지 여부를 담습니다.
Platform | UA 형태 |
Windows10 | (Windows NT 10.0; Win64; x64) |
MacOS | (Macintosh; Intel Mac OS X 13_2) |
Linux | (X11; Linux x86_64) |
Iphone | (iPhone; CPU iPhone OS 16_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/109.0.5414.112 Mobile/15E148 Safari/604.1 |
Samsung, LG | (Linux; Android 10 ; 기기버전 ) |
IPad | (iPad; CPU OS 16_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/109.0.5414.112 Mobile/15E148 Safari/604.1 |
* CriOS(Chrome on iOS)
3. 해석
위의 구조를 보면서 실제로 운영체제 및 기기, 브라우저 정보 외에 불필요한 정보가 많음을 알 수 있습니다. 이것을 직역해 보면
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36
Mozilla/5.0 은 모든 브라우저는 넷스케이프 호환되며 윈도 10 64 bit의 운영체제에서 Gecko 같은 브라우저 레이아웃 엔진인 KHTML을 사용하는 사파리와 같은 크롬 브라우저
즉, 한마디로 윈도 10에서 크롬 브라우저를 사용한다는 의미입니다.
위와 같이 불필요하게 길어진 이유는 다양한 브라우저가 나오고 코드 호환성 문제 때문입니다. 초기에 제품/버전으로 시작했었다가 IE가 넷스케이프를 , Apple이 Gecko기반의 브라우저 엔진이 아닌 KHTML 스트링을 포함, 크롬의 경우 사파리와 같은 웹킷 기반이기 때문에 사파리 스트링 포함 하면서 불필요한 정보들도 포함하고 이후 크롬 블링크 엔진은 가져다가 다른 브라우저에 쓰면서 길어지게 되었습니다. 정확히 이해하기 위해서는 브라우저의 히스토리와 함께 UA가 어떻게 변화해 왔는지 보면 알 수 있습니다.
현재 개인정보보호 문제로 크롬에서는 Client Hints를 도입하고 점진적으로 UA 포함하는 정보를 줄이는 User Agent String Reduction 프로젝트를 진행하고 있습니다. 사용자 에이전트 클라이언트 힌트(UA-CH)는 명시적으로 선언한 경우에만 받기 때문에 특정 정보만 요청 할 수 있어 필요시 UA-CH API를 사용해야 합니다.
출처:
https://developer.mozilla.org/ko/docs/Web/HTTP/Browser_detection_using_the_user_agent
https://humanwhocodes.com/blog/2010/01/12/history-of-the-user-agent-string/
https://developer.chrome.com/blog/user-agent-reduction-origin-trial/
https://developer.chrome.com/docs/privacy-sandbox/user-agent/
'CS > Web' 카테고리의 다른 글
[BE-Django] model (0) | 2021.12.06 |
---|---|
[BE-Flask] 4. HTTP (0) | 2021.11.09 |
[BE-Flask] 3. 플라스크 템플릿 (0) | 2021.11.08 |
[BE-Flask] JWT(Json Web Token) (0) | 2021.11.05 |
[BE - Flask] 2. 라우팅(Routing) (0) | 2021.11.04 |