Chrome은 사용자의 개인 정보 보호를 위해 사용자 에이전트 문자열에서 공유되는 정보를 계속해서 줄이고 있습니다.
Chrome 110 (2023년 2월)부터 Android 버전 및 기기 모델의 고정 값이 점진적으로 도입됩니다. K
모델에서는 기본값이 항상 Android 10
입니다.
user-agent에 의존하여 방문자의 운영체제 버전, Android 기기 모델 또는 자세한 브라우저 버전을 감지하는 경우 조치를 취해야 할 수도 있습니다. 자세한 내용은 계속해서 읽어보시기 바랍니다.
user-agent는 사용자의 브라우저 및 환경에 대한 정보(예: 사이트 방문자가 Android에서 Chrome 버전 110을 실행 중이라는 것을 아는 것)를 제공하는 문자열입니다. 브라우저는 이를 HTTP 헤더로 전송하고 JavaScript를 통해 사용할 수 있도록 합니다.
전체 사용자 에이전트 문자열의 문제는 크로스 사이트 추적을 허용하는 주요 요소인 모든 요청에서 기본적으로 브라우저에 관한 자세한 정보를 공유한다는 것입니다. Google의 목표는 이러한 데이터를 수동적으로 수집할 기회를 줄이는 동시에 필요할 때 데이터에 능동적으로 액세스할 수 있는 API를 제공하는 것입니다.
지금까지의 사용자 에이전트 축소
Google에서는 이미 기본적으로 제공되는 사용자 에이전트 데이터 중 일부를 삭제하고 이를 고정된 값으로 대체하기 시작했습니다.
Chrome 101부터 부 버전 번호를 0으로 대체했습니다. 예를 들어 Chrome/101.3.2.1이 Chrome/101.0.0.0이 되었습니다.
Chrome 107부터 데스크톱 운영체제 버전 및 CPU 정보를 고정된 플랫폼 값으로 대체했습니다.
Mac | ➡ | 매킨토시, 인텔 Mac OS X 10_15_7 |
Windows | ➡ | Windows NT 10.0 Win64 x64 |
ChromeOS | ➡ | X11 CrOS x86_64 14541.0.0 |
Linux | ➡ | X11 Linux x86_64 |
Chrome 110부터 수정된 Android 버전 및 기기 모델
Chrome 110부터 Android 버전 및 기기 모델의 고정 값이 점진적으로 도입됩니다.
Pixel 7
에서 Android 13
와 같은 내용이 표시되는 대신 K
모델의 기본값은 항상 Android 10
입니다.
Mozilla/5.0 (Linux, Android 13, Pixel 7) AppleWebKit/537.36 (Gecko 등의 KHTML) Chrome/95.0.0.0 모바일 Safari/537.36
Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.0.0 Mobile Safari/537.36
사용자 에이전트 형식 변경 없음
사용자 에이전트 축소는 사용자 에이전트에서 반환된 값을 변경하지만 형식은 동일하게 유지됩니다. 운영체제 유형이나 주요 브라우저 버전을 읽는 데에만 user-agent를 사용하는 경우 해당 데이터는 이전과 동일하게 계속 업데이트되므로 별도의 조치가 필요하지 않습니다.

user-agent 대안
현재 더 자세한 데이터를 사용하고 있다면 항상 점진적 개선 또는 기능 감지를 사용할 수 있는지 확인하는 것이 좋습니다.
user-agent는 다른 모든 사용자 제공 값과 같다는 점을 항상 기억해야 합니다. 이 값이 정확하다고 가정하지 말고 유효성을 검사해야 합니다. user-agent 값은 사용자, 확장 프로그램, 다른 클라이언트에 의해 쉽게 변경될 수 있으며, 아예 전송되지 않을 수도 있습니다. 대부분의 경우 사용자 에이전트 데이터 없이도 방문자에게 작동하는 콘텐츠를 전송할 수 있습니다.
사용자 에이전트 클라이언트 힌트로 자세한 데이터 요청
자세한 사용자 에이전트 데이터에 액세스해야 하는 타당한 이유는 기기별 콘텐츠, 사기 방지 기능 또는 세분화된 로깅을 제공하는 등 다양합니다. 더 자세한 데이터가 필요한 경우 User-Agent Client Hints (UA-CH) API를 사용하여 액세스할 수 있습니다. user-agent와 마찬가지로 UA-CH는 HTTP 헤더 또는 JavaScript를 통해 사용할 수 있습니다.
브라우저, 주요 버전, 운영체제, 브라우저가 휴대기기인지 여부를 알려주는 Sec-CH-UA-
접두사와 함께 기본 헤더가 전송되는 것을 이미 확인했을 수 있습니다.
⏫ Chrome의 기본 사용자 에이전트 클라이언트 힌트 요청 헤더:
Sec-CH-UA: "Chromium";v="110", "Not A(Brand";v="24", "Google Chrome";v="110"
Sec-CH-UA-Mobile: ?1
Sec-CH-UA-Platform: "Android"
응답의 Accept-CH
헤더를 사용하여 추가 데이터를 요청할 수 있습니다.
이 경우 후속 요청에서 해당 Android 버전과 기기 유형을 다시 가져오도록 Sec-CH-UA-Platform-Version
및 Sec-CH-UA-Model
를 요청할 수 있습니다.
⏬ 플랫폼 버전 및 모델을 지정하는 서버의 응답 헤더:
Accept-CH:
Sec-CH-UA-Platform-Version,
Sec-CH-UA-Model
⏫ Android 버전 및 모델 이름이 포함된 Chrome의 요청 헤더 반환:
Sec-CH-UA-Platform-Version: "13.0.0"
Sec-CH-UA-Model: "Pixel 7"
userAgentData
API에서 getHighEntropyValues()
를 호출하고 원하는 값의 배열(platformVersion
및 model
)을 전달하여 JavaScript에서도 동일한 작업을 할 수 있습니다.
이렇게 하면 특정 값을 포함하는 객체와 함께 프로미스가 반환됩니다.
navigator.userAgentData
.getHighEntropyValues(
['platformVersion', 'model']
).then(ua => { console.log(ua)
});
{
"platformVersion": "13.0.0",
"model": "Pixel 7"
}
교차 출처 또는 초기 요청
페이지에 이러한 값이 필요한 교차 출처 리소스가 있는 경우 Permissions-Policy
HTTP 헤더 또는 HTML의 Delegate-CH
메타 태그를 통해 액세스를 허용할 수 있습니다.
사이트의 첫 번째 최상위 요청에 이러한 민감한 값이 포함되어야 하는 경우 Critical-CH
HTTP 헤더를 사용하여 추가 힌트를 추가하여 초기 요청을 다시 시도하도록 브라우저에 지시할 수 있습니다.
이는 업데이트가 어려운 기존 시스템에 유용할 수 있지만 초기 HTML을 제공할 때 이러한 민감한 값에 의존하지 않는 것이 이상적입니다.
자세히 알아보기
실제로 축소된 user-agent 문자열을 보려면 다음을 확인하세요.
- goo.gle/reduced-ua-demo에서 내 기기의 축소된 사용자 에이전트 문자열을 확인하세요.
- goo.gle/ua-ch-demo에서 사용 중인 기기의 자바스크립트 및 HTTP 헤더 사용자 에이전트 클라이언트 힌트를 모두 확인하세요.
#reduce-user-agent
Chrome 플래그를 사용 설정하여 사용자 브라우저에서 축소된 사용자 에이전트 문자열을 전송합니다.
또한 여전히 사용자 에이전트 축소 오리진 트라이얼에 등록하여 사이트에서 축소된 사용자 에이전트를 받을 수도 있습니다. 다만 Google에서는 기본적으로 축소된 사용자 에이전트를 전송하는 기능을 계속 확대해 나가면서 3월 초에 이 트라이얼을 종료할 예정입니다.
사용자 에이전트 축소 방문 페이지에서 더 많은 리소스를 확인할 수 있으며 전용 user-agent-reduction GitHub 저장소에서 문제를 제기할 수도 있습니다.