Google 검색을 통한 페이지는 referrer가 제대로 보이지 않아, 그 현상을 풀이 한다.
검색 엔진을 통하여 사이트로 이동 한 후에 javascript로 document.referer 를 조사 했다. (검색 엔진을 통한 referer에는 검색 키워드가 들어 있어서 광고에 목적으로 활용 될 수 있다.)
// Daum 검색 을 통한 이동 document.referrer "http://search.daum.net/search?w=tot&DA=YZRR&t__nil_searchbox=btn&sug=&sq=&o…%ED%94%8C%EB%9F%AC%EA%B7%B8%EC%9D%B8+%EC%98%A4%ED%94%88+%EC%95%88%EB%82%B4" // Naver 검색을 통한 이동 document.referrer "http://search.naver.com/search.naver?where=nexearch&query=Evernote+%ED%94%8…B8%EC%9D%B8+%EC%98%A4%ED%94%88+%EC%95%88%EB%82%B4&sm=top_hty&fbm=1&ie=utf8" // Zum 검색을 통한 이동 document.referrer "http://search.zum.com/search.zum?method=uni&option=accu&qm=f_typing.top&que…%ED%94%8C%EB%9F%AC%EA%B7%B8%EC%9D%B8+%EC%98%A4%ED%94%88+%EC%95%88%EB%82%B4"
정상적으로 방문한 사이트의 URL이 남고 있다. 하지만, Google 검색은 달랐다.
// 크롬, Google을 통한 이동 document.referrer "https://www.google.com/" // 파이어폭스, Google을 통한 이동 document.referrer "" // 사파리, Google을 통한 이동 document.referrer "http://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CC0QFjAA&url=http%3A%2F%2Fnotice.tistory.com%2F2150&ei=0REYU9qkH4mZkAWYgoHAAw&usg=AFQjCNHHMF8zUDBf0H4GI8vA21wKXlfoCA&bvm=bv.62577051,d.aGc&cad=rjt" // IE, Google을 통한 이동 document.referrer "http://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CC0QFjAA&url=http%3A%2F%2Fnotice.tistory.com%2F2150&ei=3x4YU_qTKsimkwXtj4GYBw&usg=AFQjCNHHMF8zUDBf0H4GI8vA21wKXlfoCA&bvm=bv.62577051,d.aGc&cad=rjt"
일단 현상만 보면, 크롬 브라우저에서는 방문 했던 전체 URL이 나오지 않고 host만 나온다. 파폭은 아예 나오지도 않는다. 그리고 IE와 사파리는 URL이 넘어오나, 검색 페이지 URL이 아니라 중간에 거처 오는 페이지의 URL이다. 그리고, URL이 http로 나와 있는데 실제로 방문한 페이지는 https다. 모두 의문점이다.
이유는, Google 검색이 Https 를 이용하는데, https에서 http로 이동하면 referer가 전송되지 않는다.(참조 1) 하지만, Google 검색은 페이지를 이동하기전에 특정 페이지를(참조 2) 거쳐 가도록 하여 origin 속성으로 referrer를 담아서 보내 주고 있다. 이 과정에서 각 브라우저가 다르게 처리해서 결과가 다른 것이다.
파이어폭스가 referer를 주지 않는 이유는 origin 속성을 지원하지 않기 때문이고, IE와 사파리는 이 origin 속성으로 https 임에도 불구하고 거쳐가는 URL을 담아서 보내주고 있다.
그런데, 크롬이 https://www.google.com/ 로 나오는 이유는 브라우저 단에서 변조가 일어나는 것으로 추정하고 있으나 정확한 이유는 확인하지 못했다.
참조 1
위키 피디아에 의하면 'If a website is accessed from a HTTP Secure (HTTPS) connection and a link points to anywhere except another secure location, then the referer field is not sent.' 라고 되어 있다. http://en.wikipedia.org/wiki/HTTP_referer
참조 2
아래는 거처가는 페이지의 소스코드이다. 읽어보면 referrer 에 origin 속성을 담아 페이지를 이동시키고 있다.<script>window.googleJavaScriptRedirect=1</script> <META name="referrer" content="origin"> <script> var m = { navigateTo: function (b, a, d) { if (b != a && b.google) { // 첫번째 두번째 인자가 같지 않거나, 이전 페이지에 google 클래스가 있거나. if (b.google.r) { // 이전 페이지에 google.r이 있으면. b.google.r = 0; b.location.href = d; a.location.replace("about:blank"); // 새창으로 안하고 부모페이지에서 페이지를 이동(뭐지?) } } else { a.location.replace(d); // 이경우는 이쪽으로 오겠죠. 이게 보통의 경우로 추정. } } }; m.navigateTo(window.parent, window, "http://ko.wikipedia.org/wiki/%EB%8B%A4%EC%9D%8C"); </script> <noscript>// 자바스크립트가 동작 하지 않을경우 이동 <META http-equiv="refresh" content="0;URL='http://ko.wikipedia.org/wiki/%EB%8B%A4%EC%9D%8C'"> </noscript>
결국, https이기 때문에 referer를 담아 주기 위해 특정 페이지를 거처서 보내주긴 하나, 보안의 이유로 검색 키워드를 포함하지 않고 보낸다. 하지만, Google Analytics를 통하여 확인이 가능다 (참조 3)
즉, Google은 검색 키워드가 보안 이라는 이슈로 노출을 하고 있지 않지만, 속내는 자신들만이 이 키워드를 광고 목적으로 활용 하겠다는 것이다.
참조 3
Google Analytics를 통하여 확인 http://moz.com/blog/decoding-googles-referral-string-or-how-i-survived-secure-search
| safari 의 third party 쿠키 (0) | 2014.04.21 |
|---|
posted by 파란 별
Recent Comment