브라우저는 연결된 모든 웹 사이트로 사용자 에이전트를 보냅니다. 이전에 브라우저의 사용자 에이전트를 변경하는 것에 대해 글을 썼습니다. 그러나 어쨌든 사용자 에이전트는 정확히 무엇입니까?
사용자 에이전트는 웹 서버에 대한 브라우저 및 운영 체제를 식별하는 “문자열”(즉, 텍스트 줄)입니다. 이것은 간단하게 들리지만 사용자 에이전트는 시간이 지남에 따라 혼란스러워졌습니다.
기초
브라우저가 웹 사이트에 연결하면 HTTP 헤더에 User-Agent 필드가 포함됩니다. 사용자 에이전트 필드의 내용은 브라우저마다 다릅니다. 각 브라우저에는 고유 한 고유 한 사용자 에이전트가 있습니다. 기본적으로 사용자 에이전트는 브라우저가 웹 서버에 “안녕하세요, Windows의 Mozilla Firefox입니다”또는 “안녕하세요, iPhone의 Safari입니다”라고 말하는 방법입니다.
웹 서버는이 정보를 사용하여 다른 웹 페이지를 다른 웹 브라우저 및 다른 운영 체제에 제공 할 수 있습니다. 예를 들어, 웹 사이트는 모바일 페이지를 모바일 브라우저로, 최신 페이지를 최신 브라우저로 보내고, “브라우저를 업그레이드하십시오”메시지를 Internet Explorer 6으로 보낼 수 있습니다.
사용자 에이전트 검사
예를 들어 다음은 Windows 7의 Firefox 사용자 에이전트입니다.
Mozilla / 5.0 (Windows NT 6.1; WOW64; rv : 12.0) Gecko / 20100101 Firefox / 12.0
이 사용자 에이전트는 웹 서버에 약간의 정보를 제공합니다. 운영 체제는 Windows 7 (코드 이름 Windows NT 6.1)이고 64 비트 버전의 Windows (WOW64)이며 브라우저 자체는 Firefox 12입니다.
이제 Internet Explorer 9의 사용자 에이전트를 살펴 보겠습니다.
Mozilla / 5.0 (호환 가능; MSIE 9.0; Windows NT 6.1; WOW64; Trident / 5.0)
사용자 에이전트 문자열은 Trident 5 렌더링 엔진을 사용하여 브라우저를 IE 9로 식별합니다. 그러나, 당신은 혼란스러운 것을 발견 할 수 있습니다 – IE는 자신을 Mozilla라고합니다.
잠시 후에 다시 돌아오겠습니다. 먼저 Chrome의 사용자 에이전트도 살펴 보겠습니다.
Mozilla / 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 536.5 (Gcko와 같은 KHTML) Chrome / 19.0.1084.52 Safari / 536.5
줄거리가 두꺼워진다 : 크롬은 모질라와 사파리 인 척한다. 이유를 이해하려면 사용자 에이전트 및 브라우저 기록을 조사해야합니다.
사용자 에이전트 문자열 엉망
Mosaic는 최초의 브라우저 중 하나였습니다. 사용자 에이전트 문자열은 NCSA_Mosaic / 2.0입니다. 나중에 Mozilla가 나 왔으며 (나중에 Netscape로 이름이 변경됨) 해당 사용자 에이전트는 Mozilla / 1.0이었습니다. Mozilla는 Mosaic보다 고급 브라우저였습니다. 특히 프레임을 지원했습니다. 웹 서버는 사용자 에이전트에 Mozilla라는 단어가 포함되어 있고 프레임이 포함 된 페이지를 Mozilla 브라우저로 보냈는지 확인했습니다. 다른 브라우저에서는 웹 서버가 이전 페이지를 프레임없이 보냈습니다.
결국 Microsoft의 Internet Explorer가 등장하여 프레임도 지원했습니다. 그러나 웹 서버는 웹 브라우저를 모질라 브라우저로 보냈기 때문에 IE는 프레임이있는 웹 페이지를받지 못했습니다. 이 문제를 해결하기 위해 Microsoft는 Mozilla라는 단어를 사용자 에이전트에 추가하고 추가 정보 ( “호환”및 IE에 대한 참조)를 추가했습니다. 웹 서버는 Mozilla라는 단어를보고 기꺼이 IE를 현대적인 웹 페이지로 보냈습니다. 나중에 온 다른 브라우저도 같은 작업을 수행했습니다.
결국 일부 서버는 Firefox의 렌더링 엔진 인 Gecko라는 단어를 찾아 이전 브라우저와 다른 페이지를 Gecko 브라우저에 제공했습니다. 원래 Linux KDE 데스크톱에서 Konquerer 용으로 개발 된 KHTML은 “Gecko와 같은”이라는 단어를 추가하여 Gecko 용으로 설계된 최신 페이지를 얻었습니다. WebKit은 KHTML을 기반으로 개발되었으므로 WebKit이라는 단어를 추가하고 호환성을 위해 원래 “Kecko와 같은 KHTML”라인을 유지했습니다. 이런 방식으로 브라우저 개발자는 시간이 지남에 따라 사용자 에이전트에 단어를 계속 추가했습니다.
웹 서버는 정확한 사용자 에이전트 문자열이 무엇인지 상관하지 않으며 특정 단어가 포함되어 있는지 확인합니다.
용도
웹 서버는 다음을 포함하여 다양한 목적으로 사용자 에이전트를 사용합니다.
- 다른 웹 페이지를 다른 웹 브라우저에 제공 예를 들어, 더 간단한 웹 페이지를 이전 브라우저에 제공하거나 악의적 인 경우 “이 웹 페이지를 Internet Explorer에서보아야합니다”메시지를 표시하는 데 유용합니다.
- 모바일 장치에서 축소 된 페이지를 표시하는 등 다른 운영 체제에 다른 콘텐츠 표시
- 사용자가 사용중인 브라우저 및 운영 체제를 보여주는 통계 수집 브라우저 시장 점유율 통계를 본다면 이것이 수집 방법입니다.
웹 크롤링 봇도 사용자 에이전트를 사용합니다. 예를 들어 Google의 웹 크롤러는 자신을 다음과 같이 식별합니다.
Googlebot / 2.1 (+ http : //www.google.com/bot.html)
웹 서버는 봇에게 필수 등록 화면을 통해 봇에게 특별한 처리를 제공 할 수 있습니다. (이는 사용자 에이전트를 Googlebot으로 설정하여 등록 화면을 우회 할 수 있음을 의미합니다.)
웹 서버는 robots.txt 파일을 사용하여 특정 봇 (또는 모든 봇)에 명령을 내릴 수도 있습니다. 예를 들어, 웹 서버는 특정 봇에게 사라지거나 다른 봇에게 웹 사이트의 특정 영역 만 색인하도록 지시 할 수 있습니다. robots.txt 파일에서 봇은 사용자 에이전트 문자열로 식별됩니다.
모든 주요 브라우저에는 사용자 정의 사용자 에이전트를 설정하는 방법이 포함되어 있으므로 웹 서버가 다른 브라우저로 보내는 것을 볼 수 있습니다. 예를 들어 데스크톱 브라우저를 모바일 브라우저의 사용자 에이전트 문자열로 설정하면 데스크톱에 모바일 버전의 웹 페이지가 표시됩니다.