2008-12-29 14 views
1

J'ai une servlet s'exécutant sur Tomcat 5.5.27 et 5.5.26 et j'ai un formulaire Web avec la méthode POST. Si j'utilise Safari 3.2.1, je vois dans les logs que Tomcat reçoit un POST suivi immédiatement/simultanément par GET et il échoue. Si j'utilise Firefox 3.0.5, je vois qu'il envoie seulement le POST et tout fonctionne.Safari 3.2.1 envoie des requêtes POST suivies de requêtes GET

Essayer de déboguer avec Eclipse Je vois que lors de l'utilisation de Safari c'est la méthode doGet() qui est appelée alors que lorsque vous utilisez Firefox c'est doPost().

Pratiquement, il semble que Safari déclenche à la fois POST et GET immédiatement, tandis que Firefox ne déclenche que POST (comme il se doit selon le formulaire HTML).

Y a-t-il quelqu'un d'autre qui a vécu cela? Dans ce cas, y a-t-il une solution?

Voici un extrait du formulaire 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> 

Répondre

0

Il est difficile de dire sans voir votre code HTML pour la forme, mais peut-être votre bouton d'envoi est une enveloppe avec un lien et Safari est à la fois POSTer la forme et en suivant le lien (via GET).

+0

J'ai ajouté l'extrait de code HTML du formulaire. Comme vous pouvez le voir, il n'y a pas de lien qui entoure le bouton de soumission. – Marco

0

Je ne suis pas sûr de ce qui se passe mais ce que je sais, c'est que vous devez fournir plus d'informations. Peut-être que cela envoie un GET pour les ressources associées (comme les images) alors que Firefox les garde dans le cache, ou que vous avez le bouton submit dans une balise <, par exemple.

Une autre alternative est une incompatibilité Javascript, dans le cas où vous soumettez quelque chose via Javascript.

renifler le trafic (consulter Fiddler ou Wireshark) et voir ce qui est Safari en essayant d'obtenir et ce qui est il est afficherons

+0

Je vais essayer Wireshark. De toute façon, le GET a été enregistré par Tomcat, donc je pense que c'est GETting le servlet. Je vais vérifier quand même. – Marco

+0

Je n'utilise pas de Javascript et le bouton n'est pas dans un lien . – Marco

0

Je suis assez perplexe par le comportement de Safari depuis que je rappelle qu'il ya quelque temps, il a travaillé. Je crains que l'une des dernières mises à jour ait brisé quelque chose.

En utilisant HTTPScoop J'ai vu qu'apparemment Safari déclenche POST suivi par GET quand il obtient la réponse. Je pense cependant que cela déclenche les deux requêtes en même temps puisque la date et l'heure des deux réponses sont les mêmes pour POST et GET.

La réponse est un flux RSS et a le code HTTP/1.1 200 OK. Le second GET demande la même URL de demande (http://127.0.0.1:8180/vidisearch/Search) du POST mais le corps est à 0 octet, il n'a bien sûr pas de paramètres GET et la réponse est fausse à cause des paramètres manquants. Au lieu de cela, Firefox ne tire que le POST et obtient la bonne réponse.

1

Je pense que vous avez une étiquette d'image qui a un src vide.