Attention : Le contenu de ces pages n'a pas été mis à jour depuis longtemps. Il est probablement obsolète pour Firefox 4.0/Gecko 4.0 et supérieur. Pour du contenu plus récent, allez consulter developer.mozilla.org.

Methodes requetes http

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...)

Rappel sur les méthodes de requêtes HTTP

En schématisant, une requête HTTP contient deux parties :

  1. l'entête
  2. le corps

L'entête contient entre autre :

  • le type de la requête (GET, POST...)
  • le mime-type du corps de la requête
  • l'Url
  • etc..

Le corps de la requête contient des informations additionnelles. Leurs présences et leurs contenus dépendent du type de la requête.

Requête GET

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&param2=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.

Requête POST

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.

Requête POST avec envoi de fichier

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

  1. -111222111\r\n

Content-disposition: form-data;name="addfile"\r\n

\r\n

1\r\n

  1. -111222111\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...

  1. -111222111--\r\n

Quelques petites remarques :

  • Les \r\n à la fin de chaques lignes sont très important.
  • J'utilise le type application/octet-stream comme type de fichier uploadé par facilité, il semblerai qu'il soit mieux de mêttre le bon type mime : text/plain, text/html etc ... (mais ca marche très bien avec application/octet-stream quelque soit le type de fichier)
  • La derniere ligne contient : --boundary--

Pour plus d'information sur l'upload de fichier en HTTP, voir le RFC 1867 : http://www.faqs.org/rfcs/rfc1867.html

Utilisation de l'objet XMLHttpRequest de mozilla

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.