Как Google устанавливает HTTP Referrer, когда кто-то нажимает на ссылку с результатом поиска? - PullRequest
3 голосов
/ 09 декабря 2010

Google устанавливает HTTP Referrer, когда кто-то нажимает на ссылку с результатом поиска.Этот реферер отличается от адреса, который отображается в адресной строке URL (например, он содержит параметр GET cd, который указывает позицию результата поиска по нажатой ссылке).

Похоже, что это делается с помощью JavaScriptЯ хотел бы сделать что-то похожее на своем веб-сайте, поэтому мне было бы интересно узнать, как именно эта «манипуляция реферером» может быть выполнена с помощью javascript.

Есть идеи?

1 Ответ

3 голосов
/ 09 декабря 2010

Google перенаправляет вас через свой клик-прокси, когда вы нажимаете на его ссылки с результатами - адрес прокси - это то, что вы видите в Referer.

Пример: я перешел на http://www.google.cz и искал «Как Google устанавливает реферера HTTP, когда кто-то нажимает на ссылку с результатом поиска?». Это привело к этому запросу:

GET http://www.google.cz/search?hl=cs&source=hp&biw=1276&bih=866&q=How+does+Google+set+the+HTTP+Referrer+when+someone+clicks+on+a+search+result+link%3F&aq=f&aqi=&aql=&oq=&gs_rfai=&fp=b29a84a7dd59af16 HTTP/1.1
Referer: http://www.google.cz/

Оттуда я нажал первую ссылку на результат: Как Google устанавливает HTTP Referrer, когда кто-то нажимает на ссылку с результатом поиска? Этот щелчок был захвачен событием JS и перенаправлен на этот перенаправитель:

GET http://www.google.cz/url?sa=t&source=web&cd=1&ved=0CBoQFjAA&url=http%3A%2F%2Fstackoverflow.com%2Fquestions%2F4402502%2Fhow-does-google-set-the-http-referrer-when-someone-clicks-on-a-search-result-link&rct=j&q=How%20does%20Google%20set%20the%20HTTP%20Referrer%20when%20someone%20clicks%20on%20a%20search%20result%20link%3F&ei=WTgBTeOXLsHB8QPO44ybCA&usg=AFQjCNE22KabWH5TnkK1sRLGmqWQ4EvwxQ HTTP/1.1
Referer: http://www.google.cz/search?hl=cs&source=hp&biw=1276&bih=866&q=How+does+Google+set+the+HTTP+Referrer+when+someone+clicks+on+a+search+result+link%3F&aq=f&aqi=&aql=&oq=&gs_rfai=&fp=b29a84a7dd59af16

содержащий этот фрагмент перенаправления:

<body><a href="/2338452/kak-google-ustanavlivaet-http-referrer-kogda-kto-to-nazhimaet-na-ssylku-s-rezultatom-poiska" id=link target=_parent></body><script>var a=parent,b=parent.google,c=location;if(a!=window&&b){if(b.r){b.r=0;document.getElementById("link").click();}}else{document.getElementById("link").click();};</script><noscript><META http-equiv="refresh" content="0;URL='/2338452/kak-google-ustanavlivaet-http-referrer-kogda-kto-to-nazhimaet-na-ssylku-s-rezultatom-poiska'"></noscript>

который наконец отправил меня на реальный URL:

GET /2338452/kak-google-ustanavlivaet-http-referrer-kogda-kto-to-nazhimaet-na-ssylku-s-rezultatom-poiska HTTP/1.1
Referer: http://www.google.cz/url?sa=t&source=web&cd=1&ved=0CBoQFjAA&url=http%3A%2F%2Fstackoverflow.com%2Fquestions%2F4402502%2Fhow-does-google-set-the-http-referrer-when-someone-clicks-on-a-search-result-link&rct=j&q=How%20does%20Google%20set%20the%20HTTP%20Referrer%20when%20someone%20clicks%20on%20a%20search%20result%20link%3F&ei=WTgBTeOXLsHB8QPO44ybCA&usg=AFQjCNE22KabWH5TnkK1sRLGmqWQ4EvwxQ

Итак, вы правы - большая часть тяжелой работы здесь выполняется через JavaScript, хотя также задействован некоторый серверный код.

...