User-Agent
사용법
클라이언트는 애플리케이션, 운영체제, 렌더링 엔진을 서버에 알리기 위해 모든 요청에 User-Agent를 포함시킵니다. 서버는 이 정보를 콘텐츠 협상, 분석, 호환성 조정에 사용합니다.
값은 제품 토큰으로 이루어진 구조화된 형식을 따릅니다. 각 토큰은 제품 이름과 선택적인 버전으로 구성되고, 뒤에 괄호 안의 선택적 주석이 옵니다. 여러 토큰은 공백으로 구분되어 나타납니다.
User-Agent: <product>/<version> (<comment>) <product>/<version>
실제로 브라우저의 User-Agent 문자열은 역사적인 호환성 관행 탓에 길고 복잡해졌습니다. 대부분의 브라우저는 레거시 이유로 첫 토큰에 Mozilla/5.0을 넣고, 그 뒤에 주석으로 플랫폼 세부 정보를, 이어서 엔진과 브라우저 토큰을 붙입니다.
User-Agent 값에 따라 다른 콘텐츠를 제공하는 서버는 일종의 콘텐츠 협상을 구현하는 것입니다. 검색 엔진 크롤러는 이 헤더로 자신을 식별하므로 서버가 크롤러 전용 로직을 적용할 수 있습니다. 봇 탐지 시스템은 User-Agent 패턴을 분석하여 자동화된 트래픽과 사람 방문자를 구분합니다.
Sec-CH-UA 계열 헤더는 User-Agent 문자열에 대한 구조화된 대안을 제공합니다. User-Agent Client Hints는 같은 정보를 파싱된 저엔트로피 형식으로 전달합니다. 브라우저는 기본적으로 최소한의 힌트만 보내고, 서버는 Accept-CH 응답 헤더로 추가 세부 정보를 요청합니다. 이렇게 하면 전체 User-Agent 문자열에 비해 수동적 핑거프린팅 표면이 줄어듭니다.
product
클라이언트 소프트웨어의 제품 식별자입니다. 관례상 가장 중요한 제품을 먼저 나열합니다.
version
앞선 제품 토큰과 슬래시로 구분되어 연결된 버전 문자열입니다.
comment
괄호 안의 추가 세부 정보로, 보통 운영체제, 기기, 플랫폼을 설명합니다. 주석은 product/version 쌍 뒤에 나타납니다.
예시
데스크톱 브라우저가 플랫폼, 렌더링 엔진, 브라우저 버전을 담은 User-Agent 문자열을 보냅니다. Mozilla/5.0 접두사는 모든 최신 브라우저에 남아 있는 역사적 잔재입니다.
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/W.0.0.0 Safari/537.36
모바일 브라우저는 주석 부분에 기기와 모바일 플랫폼 정보를 포함합니다.
User-Agent: Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/W.0.0.0 Mobile Safari/537.36
Chrome의 UA 축소는 마이너, 빌드, 패치 구성 요소를 0.0.0으로 고정합니다. 메이저 버전은 릴리스마다 올라갑니다.
검색 엔진 크롤러는 식별을 위해 구별되는 User-Agent 값을 사용합니다. 주석에는 해당 크롤러 문서를 가리키는 URL이 들어 있는 경우가 많습니다.
User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Bingbot은 상시 최신 Chromium 기반 UA 문자열을 사용합니다. W.X.Y.Z 버전 구성 요소는 현재 Chrome 릴리스에 맞춰 자동으로 갱신됩니다.
데스크톱:
User-Agent: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Chrome/W.X.Y.Z Safari/537.36
모바일:
User-Agent: Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/W.X.Y.Z Mobile Safari/537.36 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
명령줄 도구와 HTTP 라이브러리는 더 짧고 단순한 값을 보냅니다.
User-Agent: curl/8.4.0
사용자 정의 API 클라이언트와 봇은 설명이 담긴 제품 이름, 버전, 연락용 URL을 포함합니다.
User-Agent: MyBot/1.0 (+https://example.re/bot)
개인정보
User-Agent 문자열은 중요한 브라우저 핑거프린팅 수단입니다. 브라우저, 버전, OS, 플랫폼 세부 정보의 조합은 거의 고유한 식별자를 만들어 내며, 추적 스크립트는 쿠키나 명시적 동의 없이 이를 악용합니다.
Chrome의 User-Agent 축소 계획은 문자열의 일부를 고정하고 상세 정보를 Sec-CH-UA 클라이언트 힌트로 옮깁니다. 클라이언트 힌트는 Accept-CH를 통한 서버의 명시적 요청이 있어야 합니다. 이로써 상세한 클라이언트 데이터가 수동적 노출에서 능동적 협상으로 옮겨 갑니다.
서버는 인증이나 접근 제어 같은 보안 결정을 User-Agent에 의존해서는 안 됩니다. 값은 클라이언트가 통제하며 문자열을 위조하는 일은 아주 쉽습니다.