브라우저는 연결하는 모든 웹 사이트에 사용자 에이전트를 보냅니다. 우리는 브라우저의 사용자 에이전트 변경 이전에 –하지만 사용자 에이전트 란 정확히 무엇입니까?
사용자 에이전트는 웹 서버에 대한 브라우저와 운영 체제를 식별하는 "문자열"(즉, 텍스트 줄)입니다. 간단 해 보이지만 사용자 에이전트는 시간이 지남에 따라 엉망이되었습니다.
기초
브라우저가 웹 사이트에 연결되면 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 (Gecko와 같은 KHTML) Chrome / 19.0.1084.52 Safari / 536.5
줄거리가 두꺼워집니다. Chrome은 Mozilla와 Safari를 모두 가장합니다. 그 이유를 이해하려면 사용자 에이전트 및 브라우저의 기록을 조사해야합니다.
사용자 에이전트 문자열 혼란
Mosaic은 최초의 브라우저 중 하나였습니다. 사용자 에이전트 문자열은 NCSA_Mosaic / 2.0입니다. 나중에 Mozilla가 등장했으며 (나중에 Netscape로 이름이 변경됨) 사용자 에이전트는 Mozilla / 1.0이었습니다. Mozilla는 Mosaic보다 고급 브라우저였습니다. 특히 프레임을 지원했습니다. 웹 서버는 사용자 에이전트에 Mozilla라는 단어가 포함되어 있는지 확인하고 프레임이 포함 된 페이지를 Mozilla 브라우저로 보냈습니다. 다른 브라우저에 웹 서버는 프레임없이 이전 페이지를 보냈습니다.
결국 Microsoft의 Internet Explorer가 등장했고 프레임도 지원했습니다. 그러나 IE는 프레임이있는 웹 페이지를받지 못했습니다. 웹 서버는 프레임이있는 웹 페이지를 Mozilla 브라우저로 전송했기 때문입니다. 이 문제를 해결하기 위해 Microsoft는 사용자 에이전트에 Mozilla라는 단어를 추가하고 추가 정보 ( "호환성"라는 단어와 IE에 대한 참조)를 추가했습니다. 웹 서버는 Mozilla라는 단어를보고 기꺼이 IE를 최신 웹 페이지로 보냈습니다. 나중에 출시 된 다른 브라우저도 동일한 작업을 수행했습니다.
결국 일부 서버는 Firefox의 렌더링 엔진 인 Gecko라는 단어를 찾고 Gecko 브라우저에 이전 브라우저와 다른 페이지를 제공했습니다. 원래 Linux의 KDE 데스크톱에서 Konquerer 용으로 개발 된 KHTML은 "like Gecko"라는 단어를 추가하여 Gecko 용으로 디자인 된 최신 페이지도 얻었습니다. WebKit은 KHTML을 기반으로했습니다. 개발 당시 WebKit이라는 단어를 추가하고 호환성을 위해 원래 "KHTML, like Gecko"라인을 유지했습니다. 이런 식으로 브라우저 개발자는 시간이 지남에 따라 사용자 에이전트에 단어를 계속 추가했습니다.
웹 서버는 정확한 사용자 에이전트 문자열이 무엇인지 실제로 신경 쓰지 않고 특정 단어가 포함되어 있는지 확인하기 만합니다.
용도
웹 서버는 다음과 같은 다양한 목적으로 사용자 에이전트를 사용합니다.
- 다른 웹 브라우저에 다른 웹 페이지를 제공합니다. 예를 들어, 이전 브라우저에 더 간단한 웹 페이지를 제공하는 것과 같이 좋은 목적으로 사용할 수 있습니다. 예를 들어 "이 웹 페이지는 Internet Explorer에서보아야합니다."메시지를 표시하는 데 사용할 수 있습니다.
- 예를 들어 모바일 장치에 날씬한 페이지를 표시하여 다른 운영 체제에 다른 콘텐츠를 표시합니다.
- 사용자가 사용중인 브라우저 및 운영 체제를 보여주는 통계 수집. 브라우저 시장 점유율 통계를 본 적이 있다면 이것이 획득 방법입니다.
웹 크롤링 봇도 사용자 에이전트를 사용합니다. 예를 들어 Google의 웹 크롤러는 자신을 다음과 같이 식별합니다.
Googlebot / 2.1 (+ http : //www.google.com/bot.html)
웹 서버는 필수 등록 화면을 통해 봇을 허용하는 등 봇에게 특별한 대우를 줄 수 있습니다. (예, 사용자 에이전트를 Googlebot으로 설정하여 등록 화면을 우회 할 수 있음을 의미합니다.)
웹 서버는 robots.txt 파일을 사용하여 특정 봇 (또는 모든 봇)에 명령을 내릴 수도 있습니다. 예를 들어 웹 서버는 특정 봇에게 사라지도록 지시하거나 다른 봇에게 웹 사이트의 특정 영역 만 색인하도록 지시 할 수 있습니다. robots.txt 파일에서 봇은 사용자 에이전트 문자열로 식별됩니다.
모든 주요 브라우저에는 사용자 지정 사용자 에이전트 설정 , 웹 서버가 다른 브라우저로 전송하는 것을 볼 수 있습니다. 예를 들어 데스크톱 브라우저를 모바일 브라우저의 사용자 에이전트 문자열로 설정하면 데스크톱에 웹 페이지의 모바일 버전이 표시됩니다.