image/svg+xml $ $ ing$ ing$ ces$ ces$ Res Res ea ea Res->ea ou ou Res->ou r r ea->r ch ch ea->ch r->ces$ r->ch ch->$ ch->ing$ T T T->ea ou->r

Introduction à HTTP

Une petite présentation du protocole HTTP

Un protocole devenu fourre-tout

Méthodes HTTP

Requête vers le serveur HTTP

Contenu d'une requête

Envoi de données pour un web dynamique

Réponse du serveur HTTP

HTTP/1.1 200 OK \r\n
Server: monBeauServeur v3 \r\n
Date: Thu, 09 Oct 2013 09:30:24 GMT \r\n
...autres en-têtes...
Content-Type: text/html \r\n
Content-Length: 2037 \r\n
\r\n
<html>
	...
</html>

Les codes de résultat

La méthode GET

Envoi de champs par méthode GET

Table ASCII

Table ASCII

Source

Déclencher l'envoi de champs par méthode GET sur le web

Exemple de formulaire HTML

<form action="http://www.bing.com/search" method="get" enctype="application/x-www-form-urlencoded">
	<label>Mot-clé à chercher : <input type="text" name="q" /></label> <br />
	<label>Rang de départ : <input type="number" name="first" /></label> <br />
	<label><input type="submit" name="submission" value="submitted"></label> <br />
</form>

Implications de l'envoi de champs par méthode GET

Dans quel cas utiliser la méthode GET pour l'envoi de champs ?

Les en-têtes HTTP

Les types MIME

Quelques en-têtes

En-têtes pour requêtes conditionnelles

Utilisables avec les requêtes GET

Le corps de la ressource est retourné ssi les conditions indiquées sont remplies (utile si l'on dispose d'une version précédente en cache et que l'on ne souhaite pas la retélécharger inutilement).

La méthode POST

Envoi de champs par méthode POST par encodage application/x-www-form-urlencoded

Les données suivent le même format que pour la méthode GET sauf qu'elles sont intégrées au corps de la requête et non à l'URL.

<form action="http://igm.univ-mlv.fr/~chilowi/sendmessage.php" 
  method="post" enctype="application/x-www-form-urlencoded">
	<label>Adresse e-mail de l'expéditeur : <input type="text" name="sender" /></label> <br />
	<label>Message à envoyer : 
		<textarea name="message" rows="5" cols="20">Message à écrire</textarea></label> <br />
	<label><input type="submit" name="submission" value="submitted"></label> <br />
</form>

Exemple : requête créée par soumission du formulaire

POST /~chilowi/sendmessage.php HTTP/1.1
Host: igm.univ-mlv.fr
User-Agent: Mozilla/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
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
DNT: 1
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 198

sender=foo%40example.com&message=Le+protocole+HTTP+est+vraiment+tr%C3%A8s+int%C3%A9ressant.%0D%0ASurtout
+lorsqu%27il+s%27agit+d%27envoyer+des+donn%C3%A9es+par+m%C3%A9thode+POST.&submission=submitted

Envoi de fichiers

Envoi de fichiers possible :

Envoi de champs par encodage multipart/form-data

Exemple de formulaire et requête d'envoi de fichiers par encodage multipart/form-data

<FORM action="http://example.com/sendFiles" enctype="multipart/form-data" method="post">
   Expéditeur : <INPUT type="text" name="sender"> <cr />
   Fichiers à envoyer : <INPUT type="file" name="files"> <br />
   <INPUT type="submit" value="Send"> <INPUT type="reset">
</FORM>
	\end{verbatim}
	\begin{verbatim}
Content-Type: multipart/form-data; boundary=AaB03x

--AaB03x
Content-Disposition: form-data; name="sender"

Mike
--AaB03x
Content-Disposition: form-data; name="files"
Content-Type: multipart/mixed; boundary=BbC04y

--BbC04y
Content-Disposition: file; filename="file1.txt"
Content-Type: text/plain

... contenu de file1.txt ...
--BbC04y
Content-Disposition: file; filename="file2.gif"
Content-Type: image/gif
Content-Transfer-Encoding: binary

...contenu de l'image file2.gif...
--BbC04y--
--AaB03x--

Les sessions en HTTP

Suivi de session en HTTP

Principe :

Comment forcer le client à réenvoyer l'identifiant de session ?

Cookies

Un cookie est une paire clé/valeur stocké par le client et associé à un domaine de validité.

Attributs d'un cookie

Usage des cookies

Risques des cookies

Sécurité
Vie privée

Évolutions du protocole HTTP

Connexion persistante et pipelining

Multiplexage des flots, compression et poussée (SPDY, HTTP/2.0)

Utilisation du protocole UDP pour HTTP/3 (QUIC)

WebSocket

WebRTC

A venir...