본문 바로가기

자바스크립트

JS)User-Agent의 작동 방식 및 사용방법

이 포스팅은 DeviceAtlas의 글을 해석한 글입니다.

 

들어가기 앞서

User-Agetn는 웹 아키텍처의 중심 부분이며 콘텐츠 협상에서 중요한 역할을 합니다.

이는 기능이나 컨텍스트에 따라 다른 클라이언트 또는 '에이전트'로 다르게 요청하는 사용자를 처리할 수 있는 기능을 구축하려는 명시적인 의도로 만들어졌습니다.

 

User-Agetn란

UA(User-Agent)는 문서, 이미지 또는 웹 페이지와 같은 자산에 대해 웹 서버에 요청하는 '에이전트' 또는 프로그램을 식별하는 영숫자 문자열입니다.

웹 아키텍처의 표준 부분이며 HTTP 헤더의 모든 웹 요청에 의해 전달됩니다. User-Agent문자열은 요청하는 장치에서 실행중인 소프트웨어 및 하드웨어에 대한 매우 구체적인 정보를 제공하기 때문에 매우 유용합니다.

 

간단한 세분화 및 리디렉션에서 더 복잡한 컨텐츠 적응 및 장치 대상 결정에 이르기까지 User-Agetn 문자열을 기반으로 웹 트래픽을 처리하는 방법에. 대한 중요한 결정을 내릴 수 있습니다.

User-Agent가 특정 개인을 식별하지는 않지만 개발자에게 트래픽을 분석하고 분류하는 매우 강력한 방법을 제공합니다.

User-Agent 문자열 자체에서 직접 수집한 이 정보에는 일반적으로 브라우저, 웹 렌더링 엔진, 운영 체제 및 장치가 포함됩니다. User-Agent 문자열이 기본 장치에 대한 추가 데이터 집합에 매핑될 때 더 자세한 정보가 반환될 수 있습니다.

이것은 DeviceAtlas와 같은 장치 감지 솔루션에서 취하는 접근 방식입니다.

 

User-Agent 분석

UA(User-Agent)문자열을 첫 번째 버전부터 HTTP 표준의 일부였으며 이후 HTTP 2.0까지 모든 업데이트에서 유지되었습니다.

이러한 표중은 User-Agent 문자열에 포함되어야 하는 항목과 해당 목적을 설명하는 항목에 대한 권장 사항을 제공합니다.

"User-Agent" 헤더 필드에는 요청을 생성한 User-Agent에 대한 정보가 포함되어 있으며, 이는 보고된 상호 운용성 문제의 범위를 식별하고 특정 User-Agent 제한을 피하기 위해 응답을 해결하거나 조정하기 위해 서버에서 자주 사용됩니다. 브라우저 또는 운영 체제 사용에 관한 분석을 위해. 
User-Agent는 특별히 그렇게 하지 않도록 구성되지 않는 한 각 요청에서 User-Agent 필드를 보내야 합니다(SHOULD).

구성 방법은 다음과 같이 정의됩니다.

User-Agent = 제품 *( RWS ( 제품 / 댓글 ) )

제품 토큰에 대한 자세한 설명은 다음과 같습니다.

User-Agent 필드 값은 하나 이상의 제품 식별자로 구성되며 각각 뒤에는 0개 이상의 주석([RFC7230]의 섹션 3.2)이 뒤따르며 User-Agent 소프트웨어와 중요한 하위 제품을 함께 식별합니다. 
규칙에 따라 제품 식별자는 User-Agent 소프트웨어를 식별하기 위한 중요도의 내림차순으로 나열됩니다. 
각 제품 식별자는 이름과 선택적 버전으로 구성됩니다.

다음은 Safari 브라우저를 사용하는 Samsung Galaxy S6 및 Mac OSX 기반 컴퓨터에서 사용하는 UA의 두가지 예입니다.

Mozilla/5.0(Linux, Android 6.0.1, SM-G920V Build/MMB29K) AppleWebKit/537.36(Gecko와 같은 KHTML) Chrome/52.0.2743.98 Mobile Safari/537.36 Mozilla/5.0(Macintosh, Intel Mac OS X 10_11_2) AppleWebKit

/ 601.3.9(Gecko와 같은 KHTML) 버전/9.0.2 Safari/601.3.9

주목해야 할 점은 HTTP/RFC7231이 요청 대기 시간을 늘리거나 "지문"을 가능하게 할 수 있는 지나치게 길고 상세한 User-Agent 문자열의 사용에 대해 경고한다는 것입니다. 기기 ID, IMEI, 사용자 이름, 전화번호, 기본 언어와 같은 개별 기기 고유의 데이터는 포함되지 않아야 합니다.

요약하면 매우 표준화된 형식이 아니며 앞으로 보게 되겠지만 이 엔트로피 매핑 및 해석에 대한 지속적이고 헌신적인 관심을 통해서만 풀릴 수 있는 상당히 혼란스러운 환경으로 발전했습니다.

 

Beyond the Browser

User-Agent는 브라우저와 가장 관련이 있지만 User-Agent가 있는 유일한 클라이언트는 아닙니다. 봇과 크롤러 에도 User-Agent가 있으며 우수한 장치 감지 솔루션으로 정확하게 식별할 수 있습니다. 다시 말하지만 이것은 봇이 종종 실제 장치로 가장하고 클릭 사기가 실제 문제인 광고 산업과 같은 일부 비즈니스 분야에 특히 유용합니다. 모든 장치 감지 솔루션이 위장한 사용자 에이전트를 정확하게 감지할 수 있는 기능이 있는 것은 아닙니다. DeviceAtlas는 서비스를 사용하는 웹사이트의 대규모 글로벌 설치 기반 덕분에 이를 수행할 수 있습니다.

보안은 서비스에 도달하는 트래픽의 특성을 인식하는 것이 매우 중요한 또 다른 큰 영역입니다. 귀하의 사이트를 크롤링할 수 있는 모든 종류의 다른 사용자 에이전트가 있습니다. 검색 엔진에서 링크 검사기, SEO 도구, 피드 리더, 스크립트 및 웹 환경의 기타 악의적 행위자에 이르기까지 다양합니다. 이러한 서로 다른 소스를 구별할 수 있으면 사이트에 대한 봇 트래픽을 감지하고 식별하여 IT 비용을 크게 절감할 수 있습니다 . 이것은 정적인 robots.txt 파일로 할 수 있는 것 이상입니다. 검색 엔진 봇은 다른 봇과 다르게 처리될 수 있고, 인적 트래픽이 다른 트래픽보다 우선 순위가 지정될 수 있으며 악의적인 행위자를 완전히 차단할 수 있습니다.

 

How deos UA work in device?

기술적인 관점에서 UA를 검사하는 것은 어렵지 않습니다.

대부분 Javascript의 navigator.userAgent를 사용하여 UA문자열을 가져올 수 있습니다.

var userAgent = navigator.userAgent;
console.log(userAgent); // YOUR UA

스니핑은 쉽지만 신뢰할 수 없습니다. 많은 회사에서 정규식 접근 방식을 사용하여 User-Agent를 분석합니다. 다시 이것은 기본 장치를 식별할 수 있는 키워드를 식별하기 위해 패턴 또는 문자열 일치에 의존합니다. 일반적인 정규식 접근 방식은 User-Agent에서 iPhone 또는 Android의 존재를 찾지만 정확도 문제가 많습니다. Android 태블릿과 휴대폰을 구별하는 것은 명백한 약점이며 iPhone 토큰의 존재는 Mozilla 토큰만큼 유용할 수 있습니다.

User-Agent 문자열은 표준 패턴을 따르지 않기 때문에 이 기술은 실패하기 쉽고 미래를 보장하지 않습니다. 새로운 장치, 브라우저 및 OS가 출시됨에 따라 정규식 규칙을 지속적으로 업데이트한 다음 테스트를 실행하여 솔루션이 여전히 잘 작동하는지 확인해야 합니다. 어느 시점에서 이것은 비용이 많이 드는 유지 관리 작업이 되고 시간이 지남에 따라 트래픽의 많은 부분을 잘못 감지하거나 감지하지 못하는 실제 위험이 됩니다. 사용자 에이전트를 정확하게 구문 분석하는 것이 하나의 문제입니다. 진정한 어려움은 언어 및 로케일 또는 측면 로드 브라우저와 같은 항목이 겹쳐 있을 때 잠재적으로 수백만 개의 순열이 있는 장치, 브라우저, OS 시장의 끊임없이 변화하는 모래 위에 머무르는 것입니다. 좋은 장치 감지 솔루션이 실제로 성과를 거두는 곳입니다.

장치 감지에는 두 가지 전제 조건이 있습니다.

  1. User-Agent 조회가 매우 빠르게 발생하고
  2. 장치 식별이 ​​매우 정확합니다.

여기에는 특정 장치에 대해 가능한 모든 사용자 에이전트 문자열을 정확하게 매핑하고 정보를 정확하고 신속하게 반환할 수 있는 동시에 새로운 변형이 발생할 때 이를 수용할 수 있을 만큼 충분히 유연할 수 있는 API가 포함됩니다. 이것이 어려운 이유는 수백만 개의 변형이 있고 항상 새로운 사용자 에이전트가 생성되고 있기 때문입니다. 모든 새로운 장치, 브라우저, 브라우저 버전, OS 또는 앱은 이전에 볼 수 없었던 새로운 사용자 에이전트를 생성할 수 있습니다.

이와 관련하여 장치 감지에 대한 모든 접근 방식이 동일하게 만들어지는 것은 아닙니다. 불량한 접근 방식은 부정확한 데이터를 갖고 잘못된 긍정을 반환합니다. 올바른 결과를 얻고 있다고 생각할 수 있지만 열등한 솔루션은 알려지지 않은 UA에 대한 기본값을 반환할 수 있습니다. 일부 접근 방식은 정교하지 않고 지저분한 API 및 코드베이스로 인해 서버 리소스를 독차지합니다.

DeviceAtlas는 Patricia trie 데이터 구조를 사용하여 가장 빠르고 효율적인 방법으로 장치의 속성을 결정합니다. 이것이 바로 주요 기업들이 DeviceAtlas와 같이 입증되고 특허를 받은 기술 을 기반으로 구축된 기존 솔루션에 의존하는 이유입니다 .