Установка location.href с относительным путем иногда приводит к неверному пути
Краткое резюме
Я работаю над проблемой, которая появляется в производстве, которую я не могу воспроизвести. В результате я отлаживаю это на основе отслеживания кода и просмотра журналов сервера. Точка сбоя - запрос одного сервлета с аргументами для другого сервлета. Это временная ситуация, после 2-3 попыток проблема исчезнет.
Детальное объяснение
Здесь есть три основных URL, первый из которых имеет форму
http://example.com/Apps/x9/HowdyServlet?argument=foo
И второе
http://example.com/Apps/x9/OtherServlet?argument=bar
И третий
http://example.com/Apps/servlet/MainServlet?thing=1
Затем у нас есть div, который является частью панели навигации на второй странице, которая выглядит следующим образом:
<div id="FrobberNav"
title="Navigate to Frobber"
class="top-navigation-button "
onmouseover="x9.topNav.mouseover(this);"
onmouseout="x9.topNav.mouseout(this);"
onclick="location.href='../servlet/MainServlet?thing=1'"
style="float:right">
<a id="FrobberNavLink"
name="FrobberNavLink"
href="#"
onclick="return false;"
title="Navigate to Frobber">Frobber</a>
</div>
Немного связанного JavaScript для наведения мыши
x9.topNav.mouseover = function(element) {
var mouseoverClasses = element.className + " top-navigation-button-hover";
// update element classes
element.className = mouseoverClasses;
};
x9.topNav.mouseout = function (element) {
removeClass(element, 'top-navigation-button-hover');
};
Ошибка в том, что иногда, когда кто-то нажимает на это div
они не переходят на URL #3, а отправляются на
http://example.com/Apps/x9/HowdyServlet?thing=1
Здесь важно отметить, что это "невозможный" URL, поскольку параметры поиска и сервлет были перепутаны.
Это Java-приложение, которое по большей части выполняет рендеринг страниц через RichFaces, управляемый Spring Web Flow. У нас не так много причудливого JavaScript, который бы переписывал эту страницу за моей спиной.
Вот где я скрежещу зубами
Я не могу воспроизвести эту ошибку на моем локальном компьютере или в нашей среде DEV или UAT. Я искал производственные журналы и вижу, что это происходит несколько раз в несколько дней. Производство работает на серверах iPlanet, которые обслуживают статический контент, а затем передают запросы приложений на некоторые серверы Weblogic. Я могу видеть неработающие запросы в логах iplanet, поэтому я знаю, что при входящем пути не происходит неправильная перезапись URL.
У меня есть свидетельство пользователя / тестера, что эту кнопку они пытались нажать, когда что-то пошло не так. Также нет других мест, где генерируется эта конкретная ссылка, кроме кода Java, который я могу идентифицировать.
Это почти похоже на location.href
значение с первой страницы как-то затягивается и используется для создания новой ссылки. Есть ли такие гоночные условия?
Мой тестировщик может подтвердить, что это происходит в IE, а другие говорят, что это произошло как в Chrome, так и в Firefox.