Safari 3.2.1 отправляет POST-запросы, а затем GET-запросы

У меня есть сервлет, работающий на Tomcat 5.5.27 и 5.5.26, и есть веб-форма с методом POST. Если я использую Safari 3.2.1, я вижу из журналов, что Tomcat получает POST, за которым сразу же/одновременно следует GET, и это не удается. Если я использую Firefox 3.0.5, я вижу, что он отправляет только POST, и все работает.

Пытаясь выполнить отладку с помощью Eclipse, я вижу, что при использовании Safari вызывается метод doGet(), а при использовании Firefox — doPost().

На практике кажется, что Safari запускает как POST, так и сразу GET, в то время как Firefox запускает только POST (как и должно быть в соответствии с формой HTML).

Есть ли кто-нибудь еще, кто испытал это? В этом случае есть решение?

Вот фрагмент HTML-формы:

<form action="/vidisearch/Search" method="post" name="SearchForm" id="SearchForm">
    <div class="input required">
    <label for="Concepts">Concepts, comma separated<br />
    ex. (remove quotes) &quot;man-made object, cemetery, graphic event, atmospheric event, tool event&quot;</label>
    <input name="concepts" type="text" value="" id="concepts" />
    </div>

    <div class="input required">
    <label for="Operators">Operators, comma separated<br />
    ex. (remove quotes) &quot;NOT, AND, OR, AND, AND&quot;</label>
    <input type="text" name="operators" value="" id="operators" />
    </div>

    <div class="input required">
    <label for="Specializations">Specializations, comma separated<br />
    ex. (remove quotes) &quot;true, false, false, true, false&quot;</label>
    <input type="text" name="specializations" value="" id="specializations" />
    </div>

    <div class="input required">
    <label for="Results">Various parameters</label>
    <table width="100%" border="0" style="border: 0;">
    <tr>
    <td>Ontology ID<br />
    <input name="ontologyID" type="text" id="ontologyID" value="" /></td>
    <td>Result page<br />
    <input name="page" type="text" id="page" value="0" /></td>
    <td>Shots per page<br />
    <input name="shotsPerPage" type="text" id="shotsPerPage" value="20" /></td>
    <td>New search<br />
    <input name="newSearch" type="text" id="newSearch" value="true" /></td></tr>
    </table>
    </div>

    <div class="submit"><input type="submit" value="Search" /></div>
</form>

person Marco    schedule 29.12.2008    source источник


Ответы (4)


Я думаю, у вас есть тег изображения с пустым src.

person Brad    schedule 22.02.2011

Трудно сказать, не видя HTML-код формы, но, возможно, ваша кнопка отправки обернута ссылкой, а Safari одновременно отправляет форму и по ссылке (через GET).

person Marc Novakowski    schedule 29.12.2008
comment
Я добавил фрагмент HTML-кода формы. Как видите, вокруг кнопки отправки нет ссылки ‹A›. - person Marco; 30.12.2008

Я не уверен, что происходит, но я знаю, что вам нужно предоставить больше информации.

Может быть, он отправляет GET для связанных ресурсов (например, изображений), тогда как Firefox хранит их в кеше, или, например, у вас есть кнопка отправки формы внутри тега ‹a>.

Другой альтернативой является несовместимость с Javascript, если вы отправляете что-то через Javascript.

Проанализируйте трафик (проверьте Fiddler или Wireshark) и посмотрите, что Safari пытается получить и что он отправляет.

person Vinko Vrsalovic    schedule 29.12.2008
comment
Попробую Wireshark. В любом случае GET был зарегистрирован Tomcat, поэтому я думаю, что он получает сервлет. Я все равно проверю. - person Marco; 30.12.2008
comment
Я не использую Javascript, и кнопка не находится внутри ссылки ‹A›. - person Marco; 30.12.2008

Я весьма озадачен поведением Safari, так как напомню, что когда-то он работал. Я боюсь, что одно из последних обновлений что-то сломало.

Используя HTTPScoop, я видел, что Safari запускает POST, а затем GET, когда получает ответ. Однако я думаю, что на самом деле он запускает оба запроса одновременно, поскольку дата и время двух ответов одинаковы как для POST, так и для GET.

Ответ представляет собой RSS-канал и имеет код HTTP/1.1 200 OK. Второй GET запрашивает тот же URL-адрес запроса (http://127.0.0.1:8180/vidisearch/Search) POST, но тело составляет 0 байт, оно, конечно, не имеет параметров GET, и ответ неверен из-за отсутствующих параметров.

Вместо этого Firefox запускает только POST и получает правильный ответ.

person Marco    schedule 29.12.2008