1

我有一个在 Tomcat 5.5.27 和 5.5.26 上运行的 servlet,并且有一个带有 POST 方法的 Web 表单。如果我使用 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>
4

4 回答 4

1

我认为您有一个具有空 src 的图像标签。

于 2011-02-22T15:40:38.033 回答
0

如果没有看到表单的 HTML,很难说,但也许您的提交按钮是用链接包裹的,而 Safari 既在发布表单,又在跟踪链接(通过 GET)。

于 2008-12-29T18:35:02.873 回答
0

我不确定发生了什么,但我知道您需要提供更多信息。

例如,它可能正在为相关资源(如图像)发送 GET,而 Firefox 将它们保存在缓存中,或者您在 <a> 标记内有表单提交按钮。

另一种选择是 Javascript 不兼容,以防您通过 Javascript 提交内容。

嗅探流量(查看FiddlerWireshark)并查看 Safari 试图获取什么以及它正在发布什么

于 2008-12-29T18:35:10.203 回答
0

我对 Safari 的行为感到非常困惑,因为我曾经提醒过它曾经工作过。我担心最新的升级之一破坏了某些东西。

使用HTTPScoop,我看到Safari 在收到响应时显然会触发POST,然后触发GET。然而,我认为它实际上同时触发了两个请求,因为两个响应的日期+时间对于 POST 和 GET 都是相同的。

响应是一个 RSS 提要并具有 HTTP/1.1 200 OK 代码。第二个 GET 请求与 POST 相同的请求 URL ( http://127.0.0.1:8180/vidisearch/Search ) 但正文是 0 字节,它当然没有 GET 参数,并且由于缺少,答案是错误的参数。

相反,Firefox 只触发 POST 并获得正确答案。

于 2008-12-29T23:08:35.643 回答