Хорошо - теперь я знаю, откуда происходит загрузка нескольких страниц! (Однако загадка еще не разгадана) .
Кажется, что сразу после делается запрос к странице, содержащей рекламу 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 Javascript вызывает ошибки . (формы Невозможно отправить сообщение на googleads.g.doubleclick.net. У получателя есть источник something.com
)
Я не буду дублировать всю информацию там, но вывод вроде бы что в AdSense JS есть ошибки. (пожалуйста, прочтите вопрос, если у вас есть время). Я знал об этой проблеме в течение некоторого времени, но решил жить с ошибками JS, а не извлекать AdSense с сайта.
Однако , Недавно я заметил, что в моем приложении ASP.NET MVC2 действия контроллера казалось, что вызывается дважды на запрос страницы (иногда даже 3 раза). Как ни странно, это происходило только на рабочем сервере. Поразмыслив, я сообщил, что одно различие между средой разработки и производственной средой заключалось в том, что скрипт JavaScript AdSense был активен только в рабочей среде.
Чтобы проверить это, я удалил весь код AdSense с одной из рабочих страниц, и вот только вот, проблема с загрузкой нескольких страниц исчезла!
Я подумал, что, возможно, причиной проблемы был тот факт, что на странице были общие ошибки JS, поэтому, чтобы проверить это, я внес несколько простых ошибок в свой собственный код JS однако это не привело к повторному появлению проблемы с загрузкой нескольких страниц .
Одна из известных ситуаций, когда страницы могут быть вызваны несколько раз за запрос, - это когда есть тегов изображений с пустыми атрибутами src или ссылки на внешние ресурсы с пустыми атрибутами src. Важно отметить, что в ответе на AdSense JS Bug , получившем наибольшее количество голосов, отмечается, что:
«Аргумент targetOrigin в этом вызове this.la установлен на http://googleads.g.doubleclick.net . Однако новый iframe был написано с его src, установленным на about: blank. "
Это выглядит устрашающе похожим на проблему с пустым src
.... Это кажется слишком частым совпадением, и в настоящее время я ' м мнения, что в этом проблема.
[РЕДАКТИРОВАТЬ: Это отвлекающий маневр]
Однако я понятия не имею, что нам нужно делать дальше. Эти множественные вызовы действий вызывают реальные проблемы (мне приходится использовать блокировку кода, сериализованные транзакции и всевозможные противные хаки, чтобы ограничить неблагоприятные эффекты). Конечно, я мог полностью выкопать не то дерево - меня озадачило, что я не могу найти никаких других ссылок на это, учитывая повсеместность AdSense и характер проблемы (но опять же выводы AdSense JS Bug вопрос тоже вызывает удивление). Я бы хотел, чтобы это оказалось моей глупой ошибкой, поэтому мне нужна проверка на вменяемость.
Я хотел бы спросить сообщество:
Резюмируем: - Мои действия выполняются 2 (иногда 3) раза на запрос страницы.
src = "about: blank"
на iFrame src = "about: blank"
из кода AdSense является наиболее вероятным источником проблемы. Просто чтобы задокументировать вещи, которые я исключил:
src = ""
/ src = "#"
) для изображений или других внешних ресурсов в html в моем коде url ('')
) Примечание: Для всех, кто хочет воспроизвести это, следует отметить, что, как ни странно, когда происходит несколько вызовов действий, Fiddler показывает только один запрос, отправляемый на сервер. Я понятия не имею, почему это должно быть так, но ведение журнала сервера не лжет :) Возможно, кто-то, у кого есть предыдущий опыт решения этой проблемы, вызванной пустыми атрибутами src в тегах img, может сказать, видели ли они такое же поведение с Fiddler .
HTML (@Ivan)
Вот как я реализую AdSense (идентификаторы удалены)
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%if (!HttpContext.Current.IsDebuggingEnabled) { %>
<%} else { %>
<%} %>
Это вставляется RenderPartial в представление:
<% Html.RenderPartial("AdSense_XXXXXX"); %>
TCP Logging ( @Tomas)
Пока что я сделал захват wirehark:
я не вижу существенной разницы между ними (хотя мои навыки работы с сетью невелики). Следует отметить, что они оба , похоже, имеют повторную передачу TCP
HTTP-запроса сразу после первоначального запроса - я не знаю значения этого. Тем не менее, я могу подтвердить, что в случае 1 журналы сервера сообщили о двух выполнениях, а в случае 2 - только об одном выполнении.
Затем я попробую вести журнал TCP на стороне сервера в обоих случаях и опубликую здесь результаты.