User-Agent 문자열 변경사항, Chrome 및 Firefox에서 영향을 완화하기 위해 취하는 전략, 개발자가 취할 수 있는 조치
Chrome 및 Firefox는 몇 개월 내에 버전 100으로 업데이트될 예정입니다. 이로 인해 비즈니스 로직을 실행하기 위해 브라우저 버전 식별에 의존하는 사이트에서 중단이 발생할 수 있습니다. 이 게시물에서는 사건 타임라인, Chrome 및 Firefox에서 영향을 완화하기 위해 취하고 있는 전략, 지원 방법을 다룹니다.
사용자 에이전트 문자열
User-Agent (UA)는 서버가 브라우저를 식별할 수 있도록 브라우저가 HTTP 헤더로 전송하는 문자열입니다. 이 문자열은 navigator.userAgent
를 사용하여 JavaScript를 통해서도 액세스할 수 있습니다.
일반적으로 형식은 다음과 같습니다.
<browser_name>/<major_version>.<minor_version>
예를 들어 이 게시물을 게시할 당시 브라우저의 최신 출시 버전은 다음과 같습니다.
- Chrome:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36
- Firefox:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:96.0) Gecko/20100101 Firefox/96.0
- Safari:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.2 Safari/605.1.15
메이저 버전 100: 3자리 버전 번호
메이저 버전 100은 Chrome과 Firefox 모두에게 중요한 이정표입니다. 또한 2자리 버전 번호에서 3자리 버전 번호로 전환할 때 웹사이트에 중단이 발생할 수 있습니다. 웹 개발자는 맞춤 코드에서 User-Agent 파싱 라이브러리 사용에 이르기까지 이러한 문자열을 파싱하는 데 모든 종류의 기법을 사용하며, 이를 통해 상응하는 처리 로직을 결정할 수 있습니다. User-Agent 및 기타 버전 보고 메커니즘은 곧 3자리 버전 번호를 보고할 예정입니다.
버전 100 타임라인
버전 100 브라우저는 먼저 실험 버전 (Chrome Canary, Firefox Nightly)으로 출시된 후 베타 버전으로 출시되고 마지막으로 안정화 버전 채널에 출시됩니다.
3자리 버전 번호가 문제가 될 수 있는 이유는 무엇인가요?
12년 전 브라우저가 처음 버전 10에 도달했을 때 메이저 버전 숫자가 1자리에서 2자리로 바뀌면서 사용자 에이전트 파싱 라이브러리에 많은 문제가 발견되었습니다.
따를 단일 사양이 없으므로 브라우저마다 사용자 에이전트 문자열 형식이 다르고 사이트별 사용자 에이전트 파싱이 다릅니다. 일부 파싱 라이브러리에는 3자리 주요 버전 번호를 고려하지 않는 하드코딩된 가정이나 버그가 있을 수 있습니다. 브라우저가 두 자리 버전 번호로 전환되었을 때 많은 라이브러리에서 파싱 로직을 개선했으므로 세 자리 마일스톤에 도달해도 문제가 줄어들 것으로 예상됩니다. Chrome팀 엔지니어인 마이크 테일러가 일반적인 UA 파싱 라이브러리에 대한 설문조사를 실시했으나 문제를 발견하지 못했습니다. 현장에서 Chrome 실험을 실행하는 과정에서 몇 가지 문제가 발생했으며 현재 해결 중입니다.
브라우저에서는 어떤 조치를 취하고 있나요?
Firefox와 Chrome 모두 웹사이트 손상 가능성을 감지하기 위해 현재 버전의 브라우저가 메인 버전 100이라고 보고하는 실험을 진행하고 있습니다. 이로 인해 몇 가지 신고된 문제가 발생했으며, 그중 일부는 이미 해결되었습니다. 이러한 실험은 버전 100이 출시될 때까지 계속 실행됩니다.
안정화 버전 채널에 버전 100이 출시되어 웹사이트에 예상보다 더 큰 피해를 끼치는 경우를 대비한 백업 완화 전략도 마련되어 있습니다.
Chrome 완화 조치
Chrome의 백업 계획은 플래그를 사용하여 메이저 버전을 99로 고정하고 사용자 에이전트 문자열의 마이너 버전 부분에 실제 메이저 버전 번호를 보고하는 것입니다 (코드는 이미 출시됨).
User-Agent 문자열에 보고된 Chrome 버전은 <major_version>.<minor_version>.<build_number>.<patch_number>
패턴을 따릅니다.
백업 계획이 적용된 경우 User-Agent 문자열은 다음과 같이 표시됩니다.
99.101.4988.0
Chrome은 Chrome 사용자 에이전트 문자열의 마이너 버전이 오랫동안 0을 보고해 왔으므로 문자열의 마이너 버전 부분에서 3자리 값을 보고해도 중단되지 않도록 하는 실험도 진행하고 있습니다. Chrome팀은 신고된 문제의 수와 심각도에 따라 백업 옵션을 사용할지 결정합니다.
Firefox 완화
Firefox에서는 중단의 중요도에 따라 전략이 달라집니다. Firefox에는 사이트 개입 메커니즘이 있습니다.
Mozilla 웹 호환성팀은 이 메커니즘을 사용하여 Firefox에서 손상된 웹사이트를 핫픽스할 수 있습니다. Firefox URL 바에 about:compat
를 입력하면 현재 수정 중인 항목을 확인할 수 있습니다. 특정 도메인에서 메이저 버전이 100인 경우 사이트가 중단되면 대신 버전 99를 전송하여 문제를 해결할 수 있습니다.
중단이 광범위하게 발생하는 경우 메인 버전 번호를 동결할 수 있습니다. 다양한 전략이 있으며 각각 장단점이 있습니다. Mozilla는 실제 버전 번호를 마이너 버전 번호로 전송하거나, 문자열을 있는 그대로 완전히 동결하거나, 다른 매개변수를 통해 실제 버전 번호를 전송할 수 있습니다.
User-Agent 문자열에 복잡성을 추가하는 모든 전략은 생태계에 큰 영향을 미칩니다. 이러한 기이한 동작이 다시 발생하지 않도록 함께 노력해 보겠습니다.
어떻게 도와드릴 수 있을까요?
Chrome 및 Firefox Nightly에서는 브라우저가 버전을 100으로 보고하도록 구성하고 발생한 문제를 신고할 수 있습니다.
메이저 버전을 100으로 보고하도록 Chrome 구성
chrome://flags/#force-major-version-to-100
페이지로 이동합니다.- 옵션을
Enabled
로 설정합니다.
Firefox Nightly를 구성하여 메이저 버전을 100으로 보고하도록 합니다.
- Firefox Nightly의 설정 메뉴를 엽니다.
- 'Firefox 100'을 검색한 다음 'Firefox 100 User-Agent 문자열' 옵션을 선택합니다.
테스트 및 신고
- 웹사이트 관리자인 경우 Chrome 및 Firefox 100으로 웹사이트를 테스트하세요. 사용자 에이전트 파싱 코드 및 라이브러리를 검토하고 세 자리 버전 번호를 처리할 수 있는지 확인합니다. 현재 중단되고 있는 패턴을 일부 모았습니다.
- 사용자 에이전트 파싱 라이브러리를 개발하는 경우 100 이상 버전을 파싱하는 테스트를 추가합니다. 초기 테스트에 따르면 최신 버전의 라이브러리가 이를 올바르게 처리할 수 있습니다. 하지만 웹에는 오래된 레거시가 많으므로 이전 버전의 파싱 라이브러리를 사용하는 경우 문제를 확인하고 업그레이드해야 합니다.
- 웹을 탐색하는 중에 주요 버전 100과 관련된 문제가 발견되면 webcompat.com에서 신고하세요.