DevKB
Web Development Knowledge Base
HOME | TOP 20 | WRITE AN ARTICLE |
Sections :



RSS RSS Feed

You too, please publish your useful code snippets in any programming language :
write an article !


Valid HTML 4.0 Transitional

Plateforme d'envoi de gros fichiers en ligne
Dépannage site web
Blog infogérance
Hébergement e-mail

Olivier Ligny - - 13/03/2008 - vue 22167 fois

Protocole HTTP : exemples de dialogues client-serveur, avec méthodes GET et POST

Voici ci dessous quelques exemples concrets de dialogues client-serveur pour comprendre les bases du protocole HTTP.
Les commentaires en rose aident à comprendre le rôle de chaque paramètre.

Exemple 1 : le client demande la page d'accueil du site Wikipedia.org (GET)

Le navigateur ouvre une connexion au serveur Wikipedia et envoie la requête suivante :

GET / HTTP/1.1  demande la page d'accueil (/)
Host: www.wikipedia.org  précise le nom du site concerné
User-Agent: Mozilla/5.0 (X11; Linux i686; fr) Firefox/2.0.0.3  informe sur l'équipement du client
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300  la connexion restera ouverte 300 secondes maximum avant fermeture auto
Connection: keep-alive

Réponse du serveur :

HTTP/1.0 200 OK  c'est bon, la page existe
Date: Thu, 13 Mar 2008 17:46:50 GMT
Server: Apache  informe sur la config du serveur web
X-Powered-By: PHP/5.2.1
Last-Modified: Fri, 7 Mar 2008 12:34:02 GMT  communique la date de dernière modif de la page
Content-Type: text/html; charset=utf-8  indique que les données vont être du code HTML encodé en UTF8
Content-Length: 57268  indique la taille des données en octets
Connection: close
ici, une ligne vide pour indiquer la fin des entêtes
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="mul" lang="mul" dir="ltr">
<head>
<title>Wikipedia</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="shortcut icon" href="http://en.wikipedia.org/favicon.ico" />
<link rel="apple-touch-icon" href="http://en.wikipedia.org/apple-touch-icon.png" />
<link rel="copyright" href="http://www.gnu.org/copyleft/fdl.html" /> ... le code HTML de la page ... </body>
</html>

Exemple 2 : le client envoie des données dans un formulaire (POST)

Nous sommes sur la page d'accueil de CJoint.com, on remplit le formulaire en sélectionnant un fichier à uploader, accompagné d'un email et d'un message. Le navigateur ouvre une connexion au serveur et envoie la requête suivante avec toutes les données :

POST /index.php HTTP/1.1  on envoie les données à la page index.php
Host: www.cjoint.com
User-Agent: Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.cjoint.com/  la ligne ci dessous indique où est la séparation entre les données
Content-Type: multipart/form-data; boundary=---------------------------3857341673786882351875586239
Content-Length: 2003  on prévient qu'on va envoyer environ 2 Ko de données

-----------------------------3857341673786882351875586239  une boundary (séparation)
Content-Disposition: form-data; name="cmd"  on envoie le champ 'cmd', sa valeur est 'rec'

rec
-----------------------------3857341673786882351875586239  une boundary (séparation)
Content-Disposition: form-data; name="USERFILE"; filename="monimage.jpg"
Content-Type: image/jpeg  on envoie le champ USERFILE : on envoie le fichier monimage.jpg, 
qui est de type image/jpeg
......JFIF.............C.............. .. ................. $.' ",#..(7),01444.'9=82<.342...C........ .2!.!22222222222222222222222222222222222222222222222222......>. ...V./.d.c.%wf.......U......qAz.;......S.G..Q].V...R.........f...........O..DR..(R.. 6....u...S...|..wp.f.....R..=... ....j:ct.5. ... les données binaires du fichier JPEG ... HQ<.=...........@m.t......[.]..e...e..........R.l......?.....P2....i?.i..[< .E....%-'d.@...u.-...k.|KjT$..L..........].....b/...l..L.2......W.{Q...Y..i}j.^[j......6<.. .(y.~>.[W.h..(K.T.{Sp&i...'.zb...w....dZ..d ..}0....G.k.....c.q.[}I..2PG....x2*P.{.;..a!_S.J........ .d...5..Ba.,}..I..t.x...b...D.J...Mn.^......N.,],...)0vq&T......^g3{|.3.hf..h)*.W..P.H..py..l`.....U ......c.-.....<..S........ s...q....U9r..,..k8..'... -----------------------------3857341673786882351875586239 une boundary (séparation) Content-Disposition: form-data; name="url" envoi du champ 'url' http://www.un-site.com/ -----------------------------3857341673786882351875586239 une boundary (séparation) Content-Disposition: form-data; name="mail" envoi du champ 'mail' mon-adresse@email.fr -----------------------------3857341673786882351875586239-- séparation finale, avec '--' au bout

La réponse du serveur :

HTTP/1.1 302 Found  tout va bien, données reçues
Date: Thu, 13 Mar 2008 17:51:08 GMT
Server: Apache/1.3.37 (Unix) mod_gzip/1.3.19.1a PHP/4.4.4 mod_ssl/2.8.28 OpenSSL/0.9.6m
X-Powered-By: PHP/4.4.4
Location: confirm.php?cjoint=dnsZioTvyK  redirection vers une page de confirmation
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html
                          aucune autre donnée n'est envoyée puisqu'il s'agit d'une redirection
0    



grave_r - - 26/06/2009
Merci infiniment pour ce topic (clair et joliment commenter) qui vient tout juste de sauver ma vie,

merci encore!!!
KiKi - 25/06/2014
Merci pour ces explications très claires qui vont me faciliter l'écriture de ma routine.


Write a comment :
Your name :     E-mail (optional) :

AntiSpam : what animal is visible on this picture ? :

Nos partenaires : iPhone 8 Cases & Protection