사용자 에이전트 (UA) 축소는 패시브 디지털 지문 수집에 사용될 수 있는 사용자 에이전트 문자열에서 공유되는 식별 정보의 양을 최소화합니다. 이제 이러한 변경사항이 정식 버전으로 출시되었으므로 모든 리소스 요청의 User-Agent
헤더가 축소되었습니다. 따라서 navigator.userAgent
, navigator.appVersion
, navigator.platform
등 특정 Navigator
인터페이스의 반환 값이 줄어듭니다.
웹 개발자는 사이트 코드에서 User-Agent 문자열 사용을 검토해야 합니다. 사이트에서 User-Agent 문자열을 파싱하여 기기 모델, 플랫폼 버전 또는 전체 브라우저 버전을 읽는 경우 User-Agent 클라이언트 힌트 API를 구현해야 합니다.
User-Agent 클라이언트 힌트 (UA-CH)
User-Agent 클라이언트 힌트를 사용하면 서버가 특정 데이터에 대한 명시적 필요성을 적극적으로 선언하는 경우에만 전체 User-Agent 데이터에 액세스할 수 있습니다.
수동적으로 노출된 사용자 데이터를 삭제하면 요청 헤더, JavaScript API, 기타 메커니즘에 의해 의도적으로 노출되는 정보의 양을 더 잘 측정하고 줄일 수 있습니다.
UA 및 UA-CH를 줄여야 하는 이유는 무엇인가요?
이전에는 User-Agent 문자열이 모든 HTTP 요청과 함께 사용자의 브라우저, 운영체제, 버전에 관한 대규모 데이터 문자열을 브로드캐스트했습니다. 이는 다음과 같은 두 가지 이유로 문제가 되었습니다.
- 세부사항의 상세도와 풍부함으로 인해 사용자 식별이 가능할 수 있습니다.
- 이 정보가 기본적으로 제공되면 은밀한 추적이 이루어질 수 있습니다.
축소된 UA 및 UA-CH는 기본적으로 기본 정보만 공유하여 사용자 개인 정보 보호를 개선합니다.
축소된 User-Agent에는 브라우저의 브랜드와 중요한 버전, 요청 출처 (데스크톱 또는 모바일), 플랫폼이 포함됩니다. 더 많은 데이터에 액세스하기 위해 User-Agent 클라이언트 힌트를 사용하면 사용자의 기기 또는 조건에 관한 특정 정보를 요청할 수 있습니다.
또한 시간이 지남에 따라 User-Agent
문자열이 더 길고 복잡해져 오류가 발생하기 쉬운 문자열 파싱이 발생했습니다. UA-CH는 해석하기 쉬운 구조화된 안정적인 데이터를 제공합니다. UA 문자열을 파싱하는 기존 코드는 중단되지 않습니다 (데이터가 더 적게 반환됨). 하지만 사이트에 특정 고객 정보가 필요한 경우 UA-CH로 이전해야 합니다.
축소된 UA 및 UA-CH는 어떻게 작동하나요?
다음은 축소된 User-Agent 문자열과 UA-CH의 작동 방식을 보여주는 간단한 예입니다. 자세한 예는 User-Agent 클라이언트 힌트를 사용하여 사용자 개인 정보 보호 및 개발자 환경 개선을 참고하세요.
사용자가 브라우저를 열고 주소 표시줄에 example.com
를 입력합니다.
브라우저가 웹페이지를 로드하기 위한 요청을 보냅니다.
- 브라우저에는 축소된 User-Agent 문자열이 포함된
User-Agent
헤더가 포함됩니다. 예를 들면 다음과 같습니다.User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.0.0 Mobile Safari/537.36
브라우저는 기본 User-Agent 클라이언트 힌트 헤더에 동일한 정보를 포함합니다. 예를 들면 다음과 같습니다.
Sec-CH-UA: "Chrome"; v="98" Sec-CH-UA-Mobile: ?1 Sec-CH-UA-Platform: "Android"
- 브라우저에는 축소된 User-Agent 문자열이 포함된
서버는 브라우저에
Accept-CH
응답 헤더와 함께 기기 모델과 같은 추가 클라이언트 힌트를 전송하도록 요청할 수 있습니다. 예를 들면 다음과 같습니다.Accept-CH: Sec-CH-UA, Sec-CH-UA-Mobile, Sec-CH-UA-Platform, Sec-CH-UA-Model
브라우저는 정책 및 사용자 구성을 적용하여 후속 요청 헤더에서 서버로 반환할 수 있는 데이터를 결정합니다. 예를 들면 다음과 같습니다.
Sec-CH-UA: "Chrome"; v="93" Sec-CH-UA-Mobile: ?1 Sec-CH-UA-Platform: "Android" Sec-CH-UA-Model: "Pixel 2"
중요한 클라이언트 힌트
초기 요청에 특정 클라이언트 힌트 세트가 필요한 경우 Critical-CH
응답 헤더를 사용할 수 있습니다. Critical-CH
값은 Accept-CH
에서 요청한 값의 하위 집합이어야 합니다.
예를 들어 최초 요청에는 Device-Memory
및 Viewport-Width
요청이 포함될 수 있으며 여기서 Device-Memory
는 중요하게 간주됩니다.
GET / HTTP/1.1
Host: example.com
HTTP/1.1 200 OK
Content-Type: text/html
Accept-CH: Device-Memory, Viewport-Width
Vary: Device-Memory, Viewport-Width
Critical-CH: Device-Memory
브라우저가 웹페이지를 올바르게 렌더링하는 데 중요한 힌트 (Critical-CH
)가 필요한 경우 서버는 Accept-CH
헤더를 사용하여 이 추가 정보를 요청할 수 있습니다. 그러면 브라우저는 중요한 힌트를 포함하여 페이지에 대한 새 요청을 보낼 수 있습니다.
요약하면 Accept-CH
는 페이지에 필요한 모든 값을 요청하는 반면 Critical-CH
는 페이지를 올바르게 로드하기 위해 로드 시 있어야 하는 값의 하위 집합만 요청합니다. 자세한 내용은 클라이언트 힌트 안정성 사양을 참고하세요.
UA-CH API로 태블릿 기기 감지
휴대기기, 태블릿, 데스크톱 기기 간의 구분이 점점 모호해지고 동적 폼 팩터 (접히는 화면, 노트북과 태블릿 모드 간 전환)가 점점 더 보편화됨에 따라 반응형 디자인과 기능 감지를 사용하여 적절한 사용자 인터페이스를 표시하는 것이 좋습니다.
그러나 User-Agent 문자열과 User-Agent 클라이언트 힌트 모두에 대해 브라우저에서 제공하는 정보는 동일한 소스에서 가져오므로 동일한 로직 형식이 작동해야 합니다.
예를 들어 UA 문자열에서 이 패턴이 선택된 경우
- 전화번호 패턴:
'Android' + 'Chrome/[.0-9]* Mobile'
- 태블릿 패턴:
'Android' + 'Chrome/[.0-9]* (?!Mobile)'
일치하는 기본 UA-CH 헤더 인터페이스가 확인될 수 있습니다.
- 전화번호 패턴:
Sec-CH-UA-Platform: "Android"
,Sec-CH-UA-Mobile: ?1
- 태블릿 패턴:
Sec-CH-UA-Platform: "Android"
,Sec-CH-UA-Mobile: ?0
또는 이에 상응하는 JavaScript 인터페이스:
- 전화번호 패턴:
navigator.userAgentData.platform === 'Android' && navigator.userAgentData.mobile === true
- 태블릿 패턴:
navigator.userAgentData.platform === 'Android' && navigator.userAgentData.mobile === false
하드웨어별 사용 사례의 경우 높은 엔트로피 Sec-CH-UA-Model
힌트를 통해 기기 모델 이름을 요청할 수 있습니다.
축소된 UA를 사용하고 테스트하려면 어떻게 해야 하나요?
시작하려면 User-Agent 문자열의 인스턴스와 사용에 대해 사이트 코드를 검토하세요. 사이트에서 User-Agent 문자열을 파싱하여 기기 모델, 플랫폼 버전 또는 전체 브라우저 버전을 읽는 경우 UA-CH API를 구현해야 합니다.
UA-CH API로 업데이트한 후에는 User-Agent에서 예상하는 데이터를 가져오는지 테스트해야 합니다. 테스트 방법에는 세 가지가 있으며 각각 복잡도가 증가합니다.
사용자 에이전트 축소의 확장된 사용 가능 여부는 모든 Chrome 기기에 완전히 축소된 UA 문자열이 제공된다는 것을 의미합니다. 2022년 2분기의 Chrome 마이너 버전 출시와 함께 감소가 시작되었습니다.
로컬에서 맞춤 문자열 테스트
맞춤 User-Agent 문자열을 사용하여 사이트를 테스트하고 다양한 기기를 시뮬레이션하려면 --user-agent="Custom string here"
명령줄 플래그를 사용하여 Chrome을 실행합니다. 명령줄 플래그에 대해 자세히 알아보세요.
또는 Chrome DevTools에서 기기 에뮬레이터를 사용하세요.
사이트 코드의 문자열 변환
클라이언트 측 또는 서버 측 코드에서 기존 Chrome user-agent
문자열을 처리하는 경우 이 문자열을 새 형식으로 변환하여 호환성을 테스트할 수 있습니다. 문자열을 재정의하고 대체하거나 새 버전을 생성하고 나란히 테스트하여 테스트할 수 있습니다.
클라이언트 힌트 및 중요 힌트 지원
서버에 반환되는 세 가지 기본 클라이언트 힌트는 브라우저 이름 및 주요 버전, 브라우저가 휴대기기에 있는지 나타내는 불리언, 운영체제 이름입니다. 전송 계층 보안 프로토콜 (TLS) 핸드셰이크 후에 전송됩니다. 이 기능은 이미 브라우저에서 사용 및 지원되고 있습니다.
하지만 사이트가 렌더링되도록 중요한 정보를 가져와야 하는 경우도 있습니다.
중요한 힌트 최적화
TLS 핸드셰이크는 브라우저와 웹 서버 간에 안전한 연결을 만드는 첫 번째 단계입니다. 개입이 없으면 Critical-CH 응답 헤더는 첫 번째 요청이 중요한 힌트 없이 전송된 경우 브라우저에 요청을 즉시 다시 시도하도록 지시하도록 설계되었습니다.

Sec-CH-UA-Model
의 힌트는 Accept-CH
를 사용하여 클라이언트 힌트로 한 번, Critical-CH
를 사용하여 중요한 힌트로 한 번 요청됩니다.중요한 힌트 (Critical-CH
헤더)를 최적화하려면 이 핸드셰이크를 가로채고 클라이언트 힌트의 모델을 제공해야 합니다. 이 단계는 복잡할 수 있으며 고급 지식이 필요합니다.
ACCEPT_CH
HTTP/2 및 HTTP/3 프레임은 TLS ALPS 확장 프로그램과 결합하여 첫 번째 HTTP 요청에 맞춰 서버의 클라이언트 힌트 환경설정을 전송하는 연결 수준 최적화입니다. 이러한 방식은 복잡한 구성이 필요하며, 정말로 중요한 정보에만 사용하는 것이 좋습니다.
BoringSSL (OpenSSL의 포크)을 사용하면 Chromium에서 Google의 실험용 기능을 사용할 수 있습니다. 현재 ALPS는 BoringSSL에만 구현되어 있습니다.
중요한 힌트를 사용해야 하는 경우 중요한 힌트 안정성 및 최적화 가이드를 참고하세요.
FAQ
Accept-CH
헤더를 통해 지정된 힌트는 얼마나 오래 전송되나요?
Accept-CH
헤더를 통해 지정된 힌트는 브라우저 세션이 진행되는 동안 또는 다른 힌트 세트가 지정될 때까지 전송됩니다.
UA-CH는 HTTP/2 및 HTTP/3과 호환되나요?
UA-CH는 HTTP/2 및 HTTP/3 연결에서 모두 작동합니다.
하위 도메인 (및 CNAME)이 높은 엔트로피 UA-CH에 액세스하려면 최상위 페이지 Permissions-Policy
가 필요한가요?
요청 헤더의 높은 엔트로피 UA-CH는 DNS 측에서 해당 출처가 정의된 방식과 관계없이 교차 출처 요청에서 제한됩니다. 위임은 교차 출처 하위 리소스의 경우 Permissions-Policy
를 통해 처리되거나 교차 출처 컨텍스트에서 실행되는 JavaScript를 통해 가져와야 합니다.
사용자 에이전트 축소는 봇 감지에 어떤 영향을 미치나요?
Chrome에서 User-Agent 문자열을 변경해도 봇이 전송하기로 선택한 User-Agent 문자열에는 직접적인 영향을 미치지 않습니다.
Chrome에서 전송하는 축소된 정보를 반영하도록 봇이 자체 문자열을 업데이트할 수도 있지만 이는 전적으로 구현자의 선택입니다. Chrome은 여전히 동일한 User-Agent 형식을 전송하며 Chrome User-Agent 문자열 끝에 자체 식별자를 추가하는 봇은 계속 그렇게 할 수 있습니다.
특정 봇에 관해 우려되는 경우 소유자에게 직접 연락하여 User-Agent 문자열을 변경할 계획이 있는지 물어보는 것이 좋습니다.
참여 및 의견 공유
- 오리진 트라이얼: 이전 오리진 트라이얼에 대한 의견을 공유합니다.
- 데모: 사용자 에이전트 축소 데모를 사용해 보세요.
- GitHub: UA-CH 설명서를 읽고 질문을 하고 토론을 살펴보세요.
- 개발자 지원: 개인 정보 보호 샌드박스 개발자 지원 저장소에서 질문을 게시하고 토론에 참여하세요.
자세히 알아보기
- 사용자 개인 정보 보호 및 개발자 환경 개선: 웹 개발자를 위한 개요
- UA 문자열에서 UA-CH로 이전: 웹 개발자를 위한 튜토리얼
- 개인 정보 보호 샌드박스 자세히 알아보기