Safari 3.2.1发送POST,然后发送GET请求

时间:2008-12-29 18:18:12

标签: forms post safari get tomcat5.5

我有一个在Tomcat 5.5.27和5.5.26上运行的servlet,并且有一个带POST方法的Web表单。 如果我使用Safari 3.2.1,我会从日志中看到Tomcat在GET之后立即/现在接收到POST,但它失败了。 如果我使用Firefox 3.0.5,我发现它只发送POST,一切正常。

尝试使用Eclipse进行调试我发现在使用Safari时,使用Firefox时调用的是doGet()方法是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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

如果没有看到表单的HTML,很难说,但是你的提交按钮可能是一个包含链接的,并且Safari会在链接之后发布表单(通过GET)。

答案 2 :(得分:0)

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

也许它正在为相关资源(如图像)发送GET,而Firefox将它们保存在缓存中,或者您在&lt; a&gt;内部有表单提交按钮。例如,标签。

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

嗅探流量(查看FiddlerWireshark)并查看Safari尝试获取的内容以及POST的内容

答案 3 :(得分: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并获得正确答案。