Update
Хорошо - теперь я знаю, откуда происходят множественные загрузки страниц! (Тем не менее, тайна еще не решена).
Похоже, что сразу же после запроса на страницу, содержащую объявления AdSense, Google делает запрос на тот же URL (один или несколько раз)
например. это то, что выглядят журналы (запросы от Mediapartners-Google):
2011-07-20 09:50:20 xxx.xxx.xxx.xxx GET /requestedURL/ 80 - xxx.xxx.xxx.xxx Mozilla/5.0+(Browserstring removed) 200 0 0 1140
2011-07-20 09:50:20 xxx.xxx.xxx.xxx GET /requestedURL/ 80 - 66.249.72.52 Mediapartners-Google 200 0 64 218
2011-07-20 09:50:22 xxx.xxx.xxx.xxx GET /requestedURL/ 80 - 66.249.72.52 Mediapartners-Google 200 0 0 171
(Я должен был больше обратить внимание на журналы IIS, а не на собственные журналы приложений - мне просто не приходило в голову, что эти множественные, идентичные, одновременные запросы могли поступать из разных источников). Это также объясняет, почему я не мог найти ничего странного при анализе запроса с помощью WireShark, и почему скрипач не показал ничего странного.
Итак, вопрос о щедрости теперь становится следующим:
- Почему Google запрашивает эти запросы так быстро после того, как запрашивается страница? (я знаю, что они должны осматривать страницу для контента, но сразу после этого и несколько раз видят, что я злоупотребляю).
- Что я могу сделать, чтобы остановить это?
И из интереса:
- Кто-нибудь еще кажется что-то похожее в своих журналах? (или это что-то странное с моей учетной записью AdSense)
Хорошо, я заранее извинюсь за длину!...
Этот вопрос посвящен этому, касающемуся кода Google Adsense Javascript, вызывающего ошибки. (формы Unable to post message to googleads.g.doubleclick.net. Recipient has origin something.com
)
Я не буду дублировать всю информацию там, но, похоже, вывод заключается в том, что JS AdSense не работает. (пожалуйста, прочитайте вопрос для фона, если у вас есть время). Я знал об этой проблеме некоторое время, но решил жить с ошибками JS, а не вытаскивать AdSense с сайта.
Однако, Недавно я заметил, что в моем приложении ASP.NET MVC2 действия Controller, по-видимому, вызывались дважды на запрос страницы (иногда даже 3 раза).. Одиночно, это происходило только на производстве сервер. По некоторым соображениям я согласился с тем, что одно из отличий между средами Dev и Production заключалось в том, что javscript AdSense был только активен в производстве.
Чтобы протестировать это, я удалил весь код AdSense с одной из рабочих страниц, и один из них, проблема с множественной загрузкой страницы исчезла!
Я подумал, что, возможно, это был факт, что на странице возникли общие ошибки JS на странице, поэтому для проверки этого я ввел некоторые простые ошибки в свой собственный JS-код, однако это не вызвало проблема с множественной загрузкой страницы для повторного появления.
Одна известная ситуация, когда страницы могут быть вызваны несколько раз для каждого запроса, это когда есть теги изображений с пустыми атрибутами src или ссылки на внешние ресурсы с пустыми атрибутами src. Реально. Самый верный ответ на вопрос AdSense JS Bug указывает, что:
"Аргумент targetOrigin в этом вызове this.la установлен в http://googleads.g.doubleclick.net. Однако новый iframe был написано с его src, установленным примерно: blank."
Это кажется устрашающе похожим на пустую проблему src
..... Это слишком много связано с совпадением, и в настоящее время я считаю, что это проблема.
[EDIT: Это была красная селедка]
Тем не менее, я понятия не имею, что вы идете отсюда. Эти вызовы с несколькими действиями вызывают реальные проблемы (мне приходится использовать блокировку кода, сериализованные транзакции и всевозможные неприятные хаки для ограничения неблагоприятных последствий). Конечно, я мог бы полностью лаять по неправильному дереву - я озадачен тем, что не могу найти никаких других ссылок на это, учитывая вездесущность AdSense и характер проблемы (но опять же выводы AdSense Вопрос JS Bug также удивителен). Мне хотелось бы, чтобы это оказалось глупой ошибкой с моей стороны, поэтому мне нужна проверка здравомыслия.
Я хотел бы спросить сообщество:
- Кто-нибудь еще испытал эту проблему?, или может кто-нибудь, кто использует AdSense, реплицировать и подтвердить это? [См. Примечание ниже]
- Предполагая, что проблема - это то, что кажется, что я могу сделать? (за исключением, конечно, вытягивания AdSense)
- Если нет, то что может быть причиной этого?
To Sumarise:- Мои действия выполняются 2 (иногда 3) раза на запрос страницы.
- ЭТО ТОЛЬКО ПРОДОЛЖАЕТСЯ, КОГДА ГОСУДАРСТВЕННЫЕ ОБЪЯВЛЕНИЯ ADS НАСТОЯЩИМ
- Я удалил все JS AdSense и ввел ошибку в свой собственный JS: Actions вызывается только один раз...
-
Аналогичная проблема может возникнуть, если на страницеприсутствуют пустые свойства src. -
Ответ на предыдущий вопрос сулит, что AdSense JS устанавливает asrc="about:blank"
на iFrame -
Я пришел к выводу, чтоsrc="about:blank"
из кода AdSense является наиболее вероятным источником проблемы. - Если я отключу JavaScript в браузере, проблема исчезнет.
Просто чтобы документировать те вещи, которые я исключил:
- Это происходит во всех браузерах: Chrome (12) Firefox (5) и IE (8).
- Я отключил все плагины в браузерах (YSlow, Firebug и т.д.)
- Нет пустых src (
src=""
/src="#"
) для изображений или других внешних ресурсов в html в моем коде - В css (
url('')
) нет ссылок на пустые ссылки URL - Это вряд ли будет проблемой на стороне сервера/конфигурации сервера, так как в Dev не существует (и нескольких различий между dev и production является отсутствие AdSence JS в Dev)
Примечание.. Для тех, кто хочет реплицировать это, следует отметить, что, как ни странно, когда происходит многократное действие, Fiddler показывает только один запрос, отправляемый на сервер. Я понятия не имею, почему это должно быть так, но ведение журнала сервера не лежит:) Возможно, тот, у кого есть предыдущий опыт работы с этой проблемой, вызванный пустыми атрибутами src в тегах img, может сказать, видели ли они то же поведение с Fiddler.
Запрошенная дополнительная информация
HTML (@Ivan)
Вот как я реализую Adsense (ids удален)
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<div class="ad">
<%if (!HttpContext.Current.IsDebuggingEnabled) { %>
<script type="text/javascript"><!--
google_ad_client = "ca-pub-xxxxxxxxxxxxxxx";
/* xxxxxxxxxxxxxxx */
google_ad_slot = "xxxxxxxxx";
google_ad_width = 728;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<%} else { %>
<img src="/Content/images/googleAdMock728x15_4_e.gif" width="728" height="15" />
<%} %>
</div>
Вставляется в RenderPartial в представлении:
<% Html.RenderPartial("AdSense_XXXXXX"); %>
Протокол TCP (@Tomas)
До сих пор я сделал захват проводов:
- на клиенте при запросе страницы на продукцию с проблемой
- на клиенте при запросе страницы на продукцию без проблем (например, Adsense Removed)
Я не вижу существенной разницы между этими двумя (хотя мои сетевые навыки невелики). Следует отметить, что оба они кажутся TCP retransmittion
HTTP-запроса сразу после первоначального запроса - я не знаю его значимости. Я могу подтвердить, что в случае 1 в журналах сервера сообщается о 2 исполнениях, а в случае 2 - только одно выполнение.
Далее я попробую TCP-протоколирование на стороне сервера в обоих случаях и отправлю результаты здесь.