Une requête HTTP est une demande envoyée au serveur par le navigateur. Cela peut être une demande d'un contenu d'un fichier : page html, fichier quelconque... Mais cela peut ne pas aboutir à un retour de contenu. Il est simplement envoyé une commande au serveur.
Dans tout les cas, le navigateur récuperera un code de retour (les codes comme 404, 202 etc...)
En schématisant, une requête HTTP contient deux parties :
L'entête contient entre autre :
Le corps de la requête contient des informations additionnelles. Leurs présences et leurs contenus dépendent du type de la requête.
La méthode GET est simple : on appelle juste une URL classique. Celle-ci peut contenir des paramètres, que le serveur/la page interprétera.
Exemple : http://monsite.com/page.php?param1=valeur1¶m2=valeur2...
Les paramètres sont séparés par une perluette & et chacun est composé comme suit : nom_du_parametre=valeur_du_parametre.
En PHP, dans la page correspondante à l'url, on pourra récupérer ces informations dans le tableau global prédéfini $_GET.
En méthode POST, nous avons également des paramètres. Par contre, ceux-ci ne sont plus indiqués dans l'url, mais dans le corps de la requête. La façon dont ils sont stockés est la même que pour GET, c'est à dire nom_du_parametre=valeur_du_parametre et chacun d'eux séparé par une perluette.
Il faut spécifier également dans l'entête que le type du contenu est application/x-www-form-urlencoded.
En PHP, on pourra récupérer les paramètres dans le tableau $_POST.
L'envois de fichiers fonctionne aussi avec la méthode POST mais necessite plusieurs arguments : # Le Content-Type qui doit être à "multipart/form-data" suivit d'une suite de charactères de délimitation. En effet, ce content-type signifie qu'il va y avoir plusieurs parties dans la corps de la requête et cette chaine permettra donc de les délimiter. Ce qui donnera au final le résultat suivant :Content-Type: multipart/form-data, boundary=3894641383813313890". A priori, on peut mettre n'importe quoi comme delimitateur (à confirmer) # Chaque partie est ensuite préfixée par une entête "Content-Disposition : form-data" et est séparée par "--delimiteur"
Plutôt que de continuer dans la théorie, je pense qu'un exemple sera plus parlant. Imaginons le formulaire html suivant :
<form enctype="multipart/form-data" action="page.php" method="post">
<input type="hidden" name="addfile" value="1">
<input type="file" name="filename"/>
<input type="submit" value="Add"/>
</form>
Il s'agit d'un simle formulaire d'upload de fichier avec un parametre de type "hidden" en plus (addfile=1). Le corp de la requête HTTP sera le suivant: %%
content-Type: multipart/form-data, boundary=111222111\r\n
\r\n
Content-disposition: form-data;name="addfile"\r\n
\r\n
1\r\n
Content-disposition: form-data;name="filename";filename="nom_fichier"\r\n
Content-Type: application/octet-stream\r\n
Content-Length: taille_du_fichier\r\n
\r\n
...Contenu du fichier...
Quelques petites remarques :
Pour plus d'information sur l'upload de fichier en HTTP, voir le RFC 1867 : http://www.faqs.org/rfcs/rfc1867.html
voir la page ApplisWeb/Request
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.