Serveur web incompatible avec la methode post
Le
Patrice Chevee
Bonjour,
je bloque sur un problème que j'ai rencontré depuis 2003, date à laquelle
j'ai essayé d'écrire un mini serveur web. J'ai tout essayé, je suis
désespéré.
Le problème est le suivant: lorsqu'on poste un formulaire en method=post, le
navigateur envoie théoriquement une entête comportant une ligne POST,
quelques lignes de baratin (genre accept *.jpeg, lang=en,fr etc), suivi
d'UNE LIGNE VIDE, elle même enfin suivie d'une ligne comportant la liste des
variables postées et leurs valeurs séparées par un signe égal, le tout en
format url-encoded.
Je me suis aperçu avec horreur que seul IE6 dans un environnement spécifique
(Win2k ou Win98) se comporte comme prévu; dans les autres cas, j'ai essayé
IE6 sous XP et aussi Mozilla Firefox, le navigateur refuse de poster la
ligne url encodée.
Voici pour l'exemple: j'ai écrit une espece de proxy espion pour sniffer le
protocole entre le client et le serveur web (ici Tinyweb de chez ritlab).
Voici ce que donne IE: http://mircscriptsfrfm.com/defis/socketweb-IE.htm
Et voici ce que donne FireFox:
http://mircscriptsfrfm.com/defis/socketweb-FF.htm
J'ai mis en bleu ce que dit le client, en noir ce que dit le serveur, et en
violet les commentaires de mon proxy. La ligne vide est symbolisée par 3
etoiles.
Dans le cas IE, on voit la variable url encodée, dans le cas FF, il poste
une ligne vide.
Il semblerait que IE fonctionne, mais c'est un bug! Dans tous les autres cas
testés, soit le navigateur poste une ligne vide, soit il ne poste pas de
ligne du tout (ce qui est catastrophique, car le serveur que j'ai écrit gèle
dans ce cas là).
Je n'y comprends rien depuis 3 ans, pouvez-vous m'aider? Honnêtement ça me
ferait beaucoup plaisir d'avoir la solution!
Merci et bien à vous tous,
P.C.
P.S. Pour info, le source du script perl appelé est en
http://mircscriptsfrfm.com/defis/control.htm . Si le code du proxy vous
intéresse, me contacter: il s'agit d'un script pour mirc.
je bloque sur un problème que j'ai rencontré depuis 2003, date à laquelle
j'ai essayé d'écrire un mini serveur web. J'ai tout essayé, je suis
désespéré.
Le problème est le suivant: lorsqu'on poste un formulaire en method=post, le
navigateur envoie théoriquement une entête comportant une ligne POST,
quelques lignes de baratin (genre accept *.jpeg, lang=en,fr etc), suivi
d'UNE LIGNE VIDE, elle même enfin suivie d'une ligne comportant la liste des
variables postées et leurs valeurs séparées par un signe égal, le tout en
format url-encoded.
Je me suis aperçu avec horreur que seul IE6 dans un environnement spécifique
(Win2k ou Win98) se comporte comme prévu; dans les autres cas, j'ai essayé
IE6 sous XP et aussi Mozilla Firefox, le navigateur refuse de poster la
ligne url encodée.
Voici pour l'exemple: j'ai écrit une espece de proxy espion pour sniffer le
protocole entre le client et le serveur web (ici Tinyweb de chez ritlab).
Voici ce que donne IE: http://mircscriptsfrfm.com/defis/socketweb-IE.htm
Et voici ce que donne FireFox:
http://mircscriptsfrfm.com/defis/socketweb-FF.htm
J'ai mis en bleu ce que dit le client, en noir ce que dit le serveur, et en
violet les commentaires de mon proxy. La ligne vide est symbolisée par 3
etoiles.
Dans le cas IE, on voit la variable url encodée, dans le cas FF, il poste
une ligne vide.
Il semblerait que IE fonctionne, mais c'est un bug! Dans tous les autres cas
testés, soit le navigateur poste une ligne vide, soit il ne poste pas de
ligne du tout (ce qui est catastrophique, car le serveur que j'ai écrit gèle
dans ce cas là).
Je n'y comprends rien depuis 3 ans, pouvez-vous m'aider? Honnêtement ça me
ferait beaucoup plaisir d'avoir la solution!
Merci et bien à vous tous,
P.C.
P.S. Pour info, le source du script perl appelé est en
http://mircscriptsfrfm.com/defis/control.htm . Si le code du proxy vous
intéresse, me contacter: il s'agit d'un script pour mirc.

Poser une question


Tu peux donner le code HTML exact fourni au navigateur ?
J'utilise quant à moi le code ci-dessous, et Netcat comme serveur
"bidon" (i.e. il se contente d'afficher ce qu'il reçoit, et te permet
de taper une réponse à renvoyer).
----début de test.html----
<html>
<body>
<input name=machin valueD>
<input name=bidule valueD>
<input type=submit value=Submit>
<form>
</body></html>
----fin de test.html----
En ligne de commande :
nc -l -p 200
POST /normal HTTP/1.1
Host: 127.1:200
User-Agent: Mozilla/5.0 (Windows; U; Windows ...
Accept: text/xml,application/xml,applicatio...
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 19
machinD&biduleD<Le curseur reste ici>
(Note : j'ai coupé les lignes trop longues)
Il est important de noter que le curseur reste à la fin de la dernière
ligne : Firefox envoie 19 octets (comme prévu), et _pas_ de retour à
la ligne.
Oui, je peux même faire mieux: j'ai uploadé le script perl en
http://www.mircscriptsfrfm.com/cgi-bin/control.pl .
C'est sympa ce truc, y en a t il une version pour windows?
Ca par contre, c'est une sacrée piste. Car a priori, mon serveur bidon écrit
en script mirc me montre que la ligne est sur le point d'être postée, vu
qu'il fournit même le Content-length (la longueur est exacte).
Merci de ta réponse prompte.
Non, c'est totalement indispensable. Presque autant qu'un clavier.
Oui. N'as-tu pas remarqué que ma machine est sous Windows ?
Yep. La plupart des protocoles fonctionnent en "ligne par ligne" :
SMTP, POP3, HTTP/GET, etc. Même HTTP/POST si tu utilises
multipart/form-data.
L'exception étant celui-ci (HTTP + POST + urlencoded). J'ai été le
premier surpris.
Intéléchargeable. Tu peux me l'envoyer stp? Enleve _OTEZ-MOI_ de mon adresse
email.
Je te remercie beaucoup.
Non. Le lien que je t'ai indiqué est une page sur Google. Si la
première adresse ne fonctionne pas, essaie la suivante.
Non. Je ne fais pas ce genre de chose.