Vous êtes sur la page 1sur 144

Chapitre II : Protocole HTTP

Mohamed Hadj Kacem


Maître assistant à l’ISIMS
Chercheur au laboratoire de recherche ReDCAD – ENIS
Protocole HTTP
http://www.redcad.org/members/hadjkacemm/
mohamed.hadjkacem@isims.usf.tn

Florence Mendes – année 2005-2006

Réalisé à partir du cours de Didier Ferment


Introduction
 HTTP (Hyper Text Transfer Protocol) est un protocole de
transfert de données hypermédia sur Internet
 Le protocole HTTP permet les transferts de fichiers entre un
navigateur Web sur une machine cliente et un serveur Web
 HTTP utilise le modèle client-serveur sur TCP :
 Le serveur Web (Apache, IIS, …)
 Le client est un navigateur (IE, Netscape, …)
 Il existe deux versions :
 HTTP/1.0
 HTTP/1.1

44 © Mohamed Hadj Kacem AU : 2020 - 2021


Avantages de HTTP
 Permet l’échange des données
 Permet de servir des documents de plusieurs types : texte
(HTML, XML,…), image (JPEG, GIF, …), multimédia, …
 Extensible avec l'emploi d'en-têtes
 Ses requêtes et réponses sont normalisées en ASCII
 Possibilité de sécurité des données avec SSL
 N'est (généralement) pas filtré par les pare-feu

45 © Mohamed Hadj Kacem AU : 2020 - 2021


Échanges HTTP
 Les étapes d’une requête sont :
 Le client effectue une connexion TCP sur le port 80
 Le client émet la requête
 Le serveur envoie le document de réponse
 Le serveur coupe la connexion

 Certains serveurs permettent de garder la connexion ouverte


pour plusieurs requêtes (Option Keep alive )

46 © Mohamed Hadj Kacem AU : 2020 - 2021


Requête HTTP
 Une requête comprend :
 Une ligne de commande contenant trois éléments devant être séparés
par un espace :
 Le nom de la commande (GET, POST, HEAD, …)
 L’URL demandé
 La version de HTTP utilisée
 Exemple : GET http://www.redcad.org/ HTTP/1.1
 Des lignes d'en-têtes (optionnelles) composées de champs et leurs
valeurs, sans ordre et séparés par passages à la ligne
 Une ligne vide
 Le corps de la requête (optionnel) composé des lignes de données

47 © Mohamed Hadj Kacem AU : 2020 - 2021


Syntaxe générale d’une requête HTTP
 Syntaxe générale d’une requête :
METHODE URL VERSION <crlf>
EN-TETE : Valeur <crlf>
...
EN-TETE : Valeur <crlf>
Ligne vide <crlf>
CORPS DE LA REQUETE
 Exemple
GET http://www.commentcamarche.net HTTP/1.0
Accept : text/html
If-Modified-Since : Saturday, 15-January-2000 14:37:11 GMT
...
User-Agent : Mozilla/4.0

48 © Mohamed Hadj Kacem AU : 2020 - 2021


Exemple
GET /members/exercice4.html HTTP/1.1
Host: www.redcad.org
Connection: Keep-Alive
User-Agent: Mozilla/5.0
Cache-control: no-cache
Accept: text/html
Accept-Charset: iso-8859-1
Accept-Language: fr, en

49 © Mohamed Hadj Kacem AU : 2020 - 2021


Commande d’une requête HTTP
Méthode Description
GET Requête pour demander la ressource située à l'URL spécifiée
HEAD Requête pour demander seulement des informations sur la
ressource située à l'URL Spécifiée sans demander la ressource elle
même
POST Cette méthode est utilisée lorsqu’une requête modifie la ressource
situé à l'URL spécifiée
PUT Cette méthode permet d'ajouter une ressource sur le serveur à
l'URL spécifiée
DELETE Cette méthode permet de supprimer la ressource située à l'URL
spécifiée
TRACE Cette méthode demande au serveur de retourner ce qu'il a reçu,
dans le but de tester et d'effectuer un diagnostic sur la connexion
CONNECT Cette méthode permet d'utiliser un proxy comme un tunnel de
communication.

50 © Mohamed Hadj Kacem AU : 2020 - 2021


En-tête de requête HTTP
 Accept: text/html, image/jpeg, image/png, text/*, image/*, */*
Le client peut recevoir tous ces formats (il pourrait y avoir un "facteur de
qualité" indiquant un ordre de préférence)
 Accept-Encoding: x-gzip, gzip, deflate, identity
Le client peut recevoir tous ces encodages (il pourrait y avoir un "facteur
de qualité")
 Accept-Charset: iso-8859-1, utf-8;q=0.5, *;q=0.5
Jeux de caractères attendu par le navigateur. Grâce aux facteurs de qualité
indiqués, si la ressource demandée existe en diverses variantes d'encodage,
alors la préférée sera l'iso-8859-1, sinon l'utf-8, ...
 Accept-Language: fr, en
Langage attendu par le navigateur (il pourrait y avoir un "facteur de
qualité")
 Host: www.monsite.fr
URI et éventuellement le port du serveur distant appelé

52 © Mohamed Hadj Kacem AU : 2020 - 2021


En-tête de requête HTTP
 Connection: close / Keep-Alive
 Close : la connexion est fermée après la réponse
 Keep-Alive : crée une connexion persistante. Avec ce type de connexion,
il est même possible d'envoyer une requête sans attendre la réponse à la
précédente
 User-Agent: Mozilla/5.0
Des informations sur le client, comme le nom et la version du navigateur,
du système d'exploitation
 Cookie: nom-cookie=valeur cookie
Permet d'envoyer au serveur les cookies qui ont été enregistrés. Un cookie
a toujours un nom et une valeur.

53 © Mohamed Hadj Kacem AU : 2020 - 2021


En-tête de requête HTTP
 Pragma: no-cache
Souhaite le contenu réel et non pas un contenu stocké sur un cache d'un
serveur (version 1.0)
 Cache-control: no-cache
Souhaite le contenu réel et non pas un contenu stocké sur un cache d'un
serveur (version 1.1)
 If-Modified-Since
Utilisé lors d'une requête de type GET : Si la ressource visée n'a pas été
modifiée depuis la date mentionnée, la copie de la ressource ne sera pas
renvoyée par le serveur. Une réponse de type 304 (non modifié) sera
renvoyée sans aucun corps d'entité associé.
Permet de spécifier que le document doit être envoyé s'il a été modifié
depuis une certaine date

54 © Mohamed Hadj Kacem AU : 2020 - 2021


Méthodes des requêtes HTTP
 POST
 Elle permet d'envoyer au serveur le contenu du corps de la
requête
 La ressource identifiée par l'URI-visée est généralement un
script exécutable qui traitera les données reçues
 Exemple
POST URL HTTP/1.1
Host: www.site.com
Connection: Close
Content-type: application
Content-Length: 33
<nouvelle ligne>
variable=valeur&variable2=valeur2

55 © Mohamed Hadj Kacem AU : 2020 - 2021


Méthodes des requêtes HTTP
 HEAD
 Demande l'envoi de l'en-tête de la réponse sans son contenu.
 Il est intéressant si on veut récupérer des informations sur un
fichier ou sur le serveur.

 Exemple
HEAD URL HTTP/1.1
Host: www.site.com
Connection: Close
<nouvelle ligne>

56 © Mohamed Hadj Kacem AU : 2020 - 2021


Requête-Réponse
 Le client-navigateur envoie une requête HTTP
 Le plus souvent GET : "donnes-moi un tel fichier"
 Sinon POST : "des données à envoyer au serveur"
 Sinon HEAD, ....

 Le serveur-distant traite la requête puis envoie une réponse HTTP


 Le plus souvent 200 OK
Suivi du contenu du fichier demandé

 Quelques fois 404 NOT FOUND


Si le fichier requis n'existe pas

 201 CREATED
Si la requête POST est bien arrivée et traitée
 ....

59 © Mohamed Hadj Kacem AU : 2020 - 2021


Réponse HTTP
 Une réponse comprend :
 Une ligne de statut comprend trois éléments devant être
séparés par un espace :
 La version du HTTP utilisée (HTTP/1.0 ou HTTP/1.1)
 Le code de statut qui précise si la requête a abouti ou s'il y a une erreur
 La signification du code
 Des lignes d'en-têtes (optionnelles) composées de champs
et leurs valeurs, sans ordre et séparés par passages à la ligne
 Une ligne vide
 Le corps de la réponse (optionnel), composé des lignes du
document demandé

60 © Mohamed Hadj Kacem AU : 2020 - 2021


Syntaxe générale d’une réponse HTTP
HTTP-VERSION CODE EXPLICATION <crlf>
EN-TETE :Valeur <crlf>
...
EN-TETE :Valeur <crlf>
Ligne vide <crlf>
CORPS DE LA REPONSE
Exemple
HTTP/1.0 200 OK
Date : Sat, 15 Jan 2000 14:37:12 GMT
Server : Microsoft-IIS/2.0
Content-Type : text/HTML
Accept-Ranges: bytes
Content-Length : 1245
Last-Modified : Fri, 14 Jan 2000 08:25:13 GMT

<html><head>...

61 © Mohamed Hadj Kacem AU : 2020 - 2021


En-tête de réponse HTTP
 Date: Tue, 22 Jun 2004 13:18:15 GMT
Date de traitement
 Server: Apache/1.3.26 (Unix) Debian GNU/Linux PHP/4.1.2
Des informations sur le serveur
 Last-Modified: Tue, 22 Jun 2004 13:15:43 GMT
Date de la dernière modification de la ressource demandée
 ETag: "63f3d-8e-40d830ff »
L’entité tag est un identifiant de la ressource et de son
contenu (pour savoir s'il a été modifié)

62 © Mohamed Hadj Kacem AU : 2020 - 2021


En-tête de réponse HTTP
 Accept-Ranges: bytes
Le client accepte les morceaux/paquets de caractères
 Content-Length: 142
Le nombre de caractères du corps de la réponse, donc du contenu du
fichier demandé
 Keep-Alive: timeout=15, max=200
Délai de maintien de la connexion
Version 1.0
 Connection: Keep-Alive
Maintien de la connexion
Version 1.1
 Content-Type: text/html
Type du contenu envoyé

63 © Mohamed Hadj Kacem AU : 2020 - 2021


Codes de statut de réponse HTTP
 10x message d'information. Ces codes ne sont pas utilisés
dans la version 1.0 du protocole
 20x correctement reçu, interprété et exécuté
 30x redirection : une décision supplémentaire doit être
prise pour terminer la requête
 40x erreur due au client : requête incorrecte
 50x erreur due au serveur : erreur interne du serveur

64 © Mohamed Hadj Kacem AU : 2020 - 2021


Codes de statut de réponse HTTP
 200 OK
 201 Créé
La requête a abouti et une nouvelle ressource en résulte
 202 Acceptée
La requête a été reçue et interprétée correctement, mais son
traitement n'est pas terminé
 203 Information non certifiée
Information retournée, mais générée par une source non certifiée
 204 Pas de contenu
La requête a abouti et le serveur n'a rien à envoyer en retour
 205 Réinitialiser le contenu
Requête traitée avec succès, la page courante peut être effacée

65 © Mohamed Hadj Kacem AU : 2020 - 2021


Codes de statut de réponse HTTP
 206 Contenu partiel
 Une partie seulement de la requête a été transmise

66 © Mohamed Hadj Kacem AU : 2020 - 2021


Codes de statut de réponse HTTP
 300 choix multiples
L’URI demandée se rapporte à plusieurs ressources
 301 déplacé
Les données demandées ont été transférées à une nouvelle
adresse
 302 temporairement déplacé
Document déplacé de façon temporaire
 303 See Other
La réponse à cette requête est ailleurs
 304 Non modifié
Document non modifié depuis la dernière requête
 305 utilisation par proxy
La requête doit être ré-adressée au proxy

67 © Mohamed Hadj Kacem AU : 2020 - 2021


Codes de statut de réponse HTTP
 400 Requête incorrecte
La requête n'a pu être reconnue par le serveur à cause d'une
syntaxe incorrecte
 401 Non autorisé
Une authentification est nécessaire pour accéder à la ressource
 403 Interdit
Le serveur a compris la requête, mais refuse de la satisfaire : L'accès
à la ressource est interdit. L’authentification est refusée.
 404 Non trouvé
Document non trouvé
 405 Méthode non autorisée
Méthode de requête non autorisée
 406 Non acceptable
La ressource demandée n'est pas disponible dans un format qui
respecterait les en-têtes "Accept" de la requête

68 © Mohamed Hadj Kacem AU : 2020 - 2021


 407 Authentification proxy nécessaire
Accès à la ressource autorisé par identification avec le
proxy
 408 délai de demande écoulé
Temps d’attente d’une réponse du serveur écoulé
 409 Conflit
La requête ne peut être traitée en l’état actuel
 410 Disparu
La ressource n'est plus disponible et aucune adresse de
redirection n’est connue

69 © Mohamed Hadj Kacem AU : 2020 - 2021


Codes de statut de réponse HTTP
 500 Erreur serveur interne
Le serveur a été en présence d'un événement inattendu, qui l'a
empêché de traiter la requête correctement
 501 Non implémenté
Fonctionnalité réclamée non supportée par le serveur
 502 Erreur de routeur
Mauvaise réponse envoyée à un serveur intermédiaire par un autre
serveur
 503 Service indisponible
Service temporairement indisponible ou en maintenance
 504 Délai d'expiration de l’intermédiaire
Temps d’attente d’une réponse d’un serveur à un serveur
intermédiaire écoulé
 505 Version HTTP non supportée
Version HTTP non gérée par le serveur

70 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice : Requête et Réponse HTTP

72 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice : Requête et Réponse HTTP
 Soit la page ci-dessus hébergée sur un serveur Web Apache/2.1
 La page est hébergée sur le lien :
www.redcad.org/members/hadjkacemm/exercice/exercice4.html
 Et sur le host : www.redcad.org
 Le serveur dispose d’un navigateur de type FrontPage/5.0.2
 La date d’hébergement de la page sur le serveur : Mardi, 05 Oct 2010
14:49:26 GMT
 La date d’hébergement de l’image sur le serveur : Samedi, 12 Sep 2010
14:45:06 GMT
 Un échange requête-réponse est initié par un navigateur client de type
Mozilla/5.0
 La requête est envoyée le Mar, 05 Oct 2010 15:37:54 GMT en utilisant
le protocole HTTP/1.1
Présenter les requêtes et les réponses nécessaires
73 selon les cas suivants
© Mohamed Hadj Kacem AU : 2020 - 2021
Exercice : Requête et Réponse HTTP
 Cas N°1 :
 Sans utilisation du serveur cache
 Sans condition sur la date de modification
 Sans fermeture de connexion

74 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice : Cas N°1
Le navigateur envoie
GET /members/hadjkacemm/exercice/exercice4.html HTTP/1.1
Host: www.redcad.org
Connection: Keep-Alive
User-Agent: Mozilla/5.0
Cache-control: no-cache
Accept: text/html, image/*
Accept-Encoding: x-gzip
Accept-Charset: iso-8859-1
Accept-Language: fr, en

75 © Mohamed Hadj Kacem AU : 2020 - 2021


Le serveur répond et envoie la page web
HTTP/1.1 200 OK Connection: Keep-Alive
Date: Tue, 05 Oct 2010 15:37:54 GMT Content-Type: text/html
Server: Apache/2.1 FrontPage/5.0.2
Last-Modified: Tue, 05 Oct 2010 <html>
14:49:26 GMT <body>
ETag: "3d30574-83-491dfc46c2980" <h1> page html </h1>
Accept-Ranges: bytes <p> avec une première image :
Content-Length: 131 <img src="soleil.jpg">
Keep-Alive: timeout=5, max=100 </p>
</body>
<html>

76 © Mohamed Hadj Kacem AU : 2020 - 2021


Le client demande l’image
Le navigateur lit que le fichier soleil.jpg doit être affiché
Le navigateur envoie
GET /members/hadjkacemm/exercice/soleil.jpg HTTP/1.1
Host: www.redcad.org
Connection: Keep-Alive
User-Agent: Mozilla/5.0
Cache-control: no-cache
Accept: image/jpeg
Accept-Encoding: x-gzip
Accept-Charset: iso-8859-1
Accept-Language: fr, en

77 © Mohamed Hadj Kacem AU : 2020 - 2021


Le serveur répond et envoie l’image
HTTP/1.1 200 OK Connection: Keep-Alive
Date: Tue, 05 Oct 2010 15:38:25 GMT Content-Type: image/jpeg
Server: Apache/2.1 FrontPage/5.0.2
Last-Modified: Sun, 12 Sep 2010 14:45:06 Ï Ó ►JFIF ☺☺ ☺ ☺ █ ä
GMT ♠♠¶↕◄§¶‼¶§¶§¶↨¶↨↨↑↑↑↑↨¶↑↨→§↨
ETag: "3d30556-888-4901106934080" →↨↨§¶↑∟&%↑→#→↨↨▼/ #'
Accept-Ranges: bytes ),,,↨▲150*5&+,)☺
Content-Length: 2184 (Soleil.jpg)
Keep-Alive: timeout=5, max=100

78 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice
 Cas N°2 :
 Avec utilisation d’un serveur cache
 Condition sur la date de modification : Tue, 05 Oct 2010
15:50:26 GMT
 Sans fermeture de connexion

79 © Mohamed Hadj Kacem AU : 2020 - 2021


Cas N°2
Le navigateur envoie
GET /members/hadjkacemm/exercice/exercice4.html HTTP/1.1
Host: www.redcad.org
Connection: Keep-Alive
User-Agent: Mozilla/5.0
Accept: text/html
Accept-Encoding: x-gzip
Accept-Charset: iso-8859-1
Accept-Language: fr, en
if-modified-since: Tue, 05 Oct 2010 15:50:26 GMT

80 © Mohamed Hadj Kacem AU : 2020 - 2021


Le serveur répond
HTTP/1.1 304 Not Modified
Date: Tue, 05 Oct 2010 16:04:44 GMT
Server: Apache/2.1 FrontPage/5.0.2
Connection: Keep-Alive
Keep-Alive: timeout=5, max=100
ETag: "3d30574-83-491dfc46c2980"

<html>
<body>
<h1> page html </h1>
<p> avec une première image : <img src="soleil.jpg"> </p>
</body>
<html>
81 © Mohamed Hadj Kacem AU : 2020 - 2021
Le client demande l’image
Le navigateur lit que le fichier soleil.jpg doit être affiché
Le navigateur envoie
GET /members/hadjkacemm/exercice/soleil.jpg HTTP/1.1
Host: www.redcad.org
Connection: Keep-Alive
User-Agent: Mozilla/5.0
Accept: image/jpeg
Accept-Encoding: x-gzip
Accept-Charset: iso-8859-1
Accept-Language: fr, en
if-modified-since: Tue, 05 Oct 2010 15:50:26 GMT

82 © Mohamed Hadj Kacem AU : 2020 - 2021


Le serveur répond
HTTP/1.1 304 Not Modified
Date: Tue, 05 Oct 2010 21:50:58 GMT
Server: Apache/2.1 FrontPage/5.0.2
Connection: Keep-Alive
Keep-Alive: timeout=5, max=100
ETag: "3d30556-888-4901106934080"

Ï Ó ►JFIF ☺☺ ☺ ☺ █ ä
♠♠¶↕◄§¶‼¶§¶§¶↨¶↨↨↑↑↑↑↨¶↑↨→§↨→↨↨§¶↑∟
&%↑→#→↨↨▼/ #'
),,,↨▲150*5&+,)☺

83 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice
 Cas N°3 :
 Avec utilisation du serveur cache
 Condition sur la date de modification : Mon, 04 Oct 2010
14:28:26 GMT
 Avec fermeture de connexion

84 © Mohamed Hadj Kacem AU : 2020 - 2021


Cas N°3
GET /members/hadjkacemm/exercice/exercice4.html HTTP/1.1
Host: www.redcad.org
Connection: close
User-Agent: Mozilla/5.0
Accept: text/html
Accept-Encoding: x-gzip
Accept-Charset: iso-8859-1
Accept-Language: fr, en
if-modified-since: Mon, 04 Oct 2010 14:28:26 GMT

85 © Mohamed Hadj Kacem AU : 2020 - 2021


Le serveur répond et envoie la page
HTTP/1.1 200 OK Content-Type: text/html
Date: Tue, 05 Oct 2010 16:17:01 GMT
Server: Apache/2.1 FrontPage/5.0.2 <html>
Last-Modified: Tue, 05 Oct 2010 14:49:26 <body>
GMT <h1> page html </h1>
ETag: "3d30574-83-491dfc46c2980" <p> avec une premiÞre image :
Accept-Ranges: bytes <img src="soleil.jpg">
Content-Length: 131 </p>
Connection: close </body>
<html>

86 © Mohamed Hadj Kacem AU : 2020 - 2021


Cas N°3
GET /members/hadjkacemm/exercice/soleil.jpg HTTP/1.1
Host: www.redcad.org
Connection: close
User-Agent: Mozilla/5.0
Accept: image/jpeg
Accept-Encoding: x-gzip
Accept-Charset: iso-8859-1
Accept-Language: fr, en
if-modified-since: Mon, 04 Oct 2010 14:28:26 GMT

87 © Mohamed Hadj Kacem AU : 2020 - 2021


Le serveur répond
HTTP/1.1 304 Not Modified
Date: Tue, 05 Oct 2010 16:22:10 GMT
Server: Apache/2.1 FrontPage/5.0.2
Connection: close
ETag: "3d30556-888-4901106934080"

soleil.jpg

88 © Mohamed Hadj Kacem AU : 2020 - 2021


Connexions persistantes
 La fonctionnalité de connexions persistantes apparue avec la
version 1.1 du protocole HTTP. C’est l’amélioration la plus
notable par rapport à la version 1.0
 Avec la version 1.0 de HTTP, une nouvelle connexion TCP doit
être établie pour chaque URL demandée
 Avec la version 1.1, une connexion TCP existante peut être
réutilisée pour demander d’autres URLs
 Il est possible avec la version 1.1 d’effectuer sur une seule
connexion TCP plusieurs requêtes HTTP sans avoir à attendre
les réponses HTTP

89 © Mohamed Hadj Kacem AU : 2020 - 2021


Connexions persistantes
HTTP 1.0
Établissement TCP

Get /image1.jpg HTTP/1.0

HTTP/1.0 200 Ok

Data image1.jpg
Libération TCP
Serveur Web
Client
Établissement TCP
Get /image2.jpg HTTP/1.0

HTTP/1.0 200 Ok

Data image2.jpg

Libération TCP
90 © Mohamed Hadj Kacem AU : 2020 - 2021
Connexions persistantes
HTTP 1.1
Établissement TCP

Get /image1.jpg HTTP/1.1

HTTP/1.1 200 Ok

Data image1.jpg
Get /image2.jpg HTTP/1.1
Serveur Web
Client
HTTP/1.1 200 Ok

Data image2.jpg
Libération TCP

91 © Mohamed Hadj Kacem AU : 2020 - 2021


Connexions persistantes
 Cette amélioration permet de :
 Diminuer la charge CPU (pour les routeurs, serveurs Web, clients,
proxys…) engendrée par les établissements TCP
 Diminuer le nombre de paquets transitant sur le réseau dû aux
établissements TCP
 Diminuer la latence engendrée par l’établissement de connexion
TCP
 Les clients désirant maintenir une connexion TCP ouverte doivent
inclure dans leur requête HTTP l’en-tête Connection: keep-alive

92 © Mohamed Hadj Kacem AU : 2020 - 2021


Connexions persistantes
 Une fois ces données envoyées au client, le serveur coupe la
communication et attend une nouvelle requête

93 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice
 Cas N°3 :
 Avec utilisation du serveur cache
 Condition sur la date de modification : Mon, 04 Oct 2010
14:28:26 GMT
Présenter schématiquement les requêtes et les réponses pour le
cas du protocole HTTP/1.0 et HTTP/1.1

94 © Mohamed Hadj Kacem AU : 2020 - 2021


 Présenter schématiquement les requêtes et les réponses
pour le cas du protocole HTTP/1.0 et HTTP/1.1

95 © Mohamed Hadj Kacem AU : 2020 - 2021


Connexions persistantes
HTTP 1.0
Établissement TCP

Get /members/hadjkacemm/exercice/exercice4.html HTTP/1.0


Host: www.redcad.org
if-modified-since: Mon, 04 Oct 2010 14:28:26 GMT
HTTP/1.0 200 OK

<html> … </html>
Libération TCP
Serveur Web
Client Établissement TCP

Get /members/hadjkacemm/exercice/soleil.jpg HTTP/1.0


Host: www.redcad.org
if-modified-since: Mon, 04 Oct 2010 14:28:26 GMT
HTTP/1.0 304 Not Modified

Libération TCP
96 © Mohamed Hadj Kacem AU : 2020 - 2021
Connexions persistantes
HTTP 1.1
Établissement TCP

Get /members/hadjkacemm/exercice/exercice4.html HTTP/1.1


Host: www.redcad.org
if-modified-since: Mon, 04 Oct 2010 14:28:26 GMT
Connection: keep-alive
HTTP/1.1 200 OK

Serveur Web
Client
Get /members/hadjkacemm/exercice/soleil.jpg HTTP/1.1
Host: www.redcad.org
if-modified-since: Mon, 04 Oct 2010 14:28:26 GMT
Connection: keep-alive

HTTP/1.1 304 Not Modified

Libération TCP
97 © Mohamed Hadj Kacem AU : 2020 - 2021
Cache local
 Un utilisateur demande souvent les mêmes pages Web
 Les navigateurs web sont dotés d'un "cache" local
 Les pages web chargées sont stockées dans le cache durant un
temps fixé par l'utilisateur
 A un nouvel accès à une page, si cette page se trouve déjà dans
le cache et qu'elle est encore "valide", le navigateur l'affiche
directement
 Ceci limite les transferts sur le réseau

98 © Mohamed Hadj Kacem AU : 2020 - 2021


Cache

Serveur Web

Proxy-Cache

Serveur Web

99 © Mohamed Hadj Kacem AU : 2020 - 2021


Serveur cache
 Le serveur cache est un serveur intermédiaire HTTP entre le
client et le vrai serveur Web
 Il demande au vrai serveur Web les informations, les transmet
au client et garde une copie sur son espace-disque (le cache)
 Si un client demande au serveur-cache une page qui se trouve
déjà dans le cache et qui est encore valide, il la fournit au client
 Pour diminuer la charge réseau et le temps d'obtention d'une
page, un tel serveur doit être prés du client
 Dans certains cas, le cache ne peut pas être utilisé : par
exemple les pages "PHP", et dans ce cas, le server-cache
transmet la requête au vrai serveur

100 © Mohamed Hadj Kacem AU : 2020 - 2021


Cache proxy
 Les proxys HTTP possèdent souvent, la fonctionnalité de
cache. Ce cache va permettre au proxy de fournir aux
clients les objets présents dans son cache sans qu’il doive
effectuer une requête HTTP auprès du serveur possédant
l’objet
 Ce cache est à la disposition de tous les clients utilisant le
proxy
 En général, c'est le même serveur qui assure le rôle de
proxy et de cache

101 © Mohamed Hadj Kacem AU : 2020 - 2021


En-têtes en relation avec le mécanisme de
cache
 Plusieurs en-têtes permettent d’agir sur le fonctionnement du
cache
 Ces en-têtes sont (liste non exhaustive) :
 Last-Modified
 If-Modified-Since
 Date
 Expires
 Cache-Control
 ETag
 Les 4 premiers en-têtes étaient déjà présents dans la version
1.0 de HTTP
 Les en-têtes Cache-Control et ETag sont des nouveautés de la
version 1.1 du protocole

102 © Mohamed Hadj Kacem AU : 2020 - 2021


If-Modified-Since : Get conditionnel
 If-Modified-Since : permet de spécifier au serveur qu’on
ne désire recevoir le fichier demandé que s’il a subit des
modifications depuis une date donnée

Get news.html HTTP/1.1


If-Modified-Since: Man, 10 Oct 2011 08:05:31 GMT

HTTP/1.1 304 Not Modified

Client Serveur

news.html
Last Modification= Sun, 09 Oct
2011 09:30:00 GMT

103 © Mohamed Hadj Kacem AU : 2020 - 2021


Etag
 Un ETag est une valeur générée par le serveur Web
permettant d’identifier de manière unique un objet
 Un ETag est créé lorsqu’un nouvel objet est mis à
disposition sur le serveur Web
 Cet ETag est modifié à chaque modification de l’objet en
question
 Un Etag est souvent utilisé avec les en-têtes If-Match et If-
None-Match

104 © Mohamed Hadj Kacem AU : 2020 - 2021


Etag

Get image.gif HTTP/1.1


If-None-Match: ‘451274cc2bb’

HTTP/1.1 304 Not Modified

Clients Serveur

image.gif
Etag: ‘451274cc2bb’

105 © Mohamed Hadj Kacem AU : 2020 - 2021


En-tête Cache-Control
 Cet en-tête permet de donner plus de contrôle aux
éditeurs Web sur leur contenu et offre une gestion plus
efficace du cache
 Plusieurs directives peuvent être placées dans un en-tête
Cache-Control
Directive Description
max-age Spécifie le temps (en secondes) maximum durant lequel l’objet peut
être considéré comme « frais »
private Indique que la réponse ne doit pas être mise en cache
public Indique que la réponse peut être mise en cache

106 © Mohamed Hadj Kacem AU : 2020 - 2021


Serveur proxy
 Le serveur proxy est un intermédiaire entre le client et le
serveur. Il sert de pare-feu
 Il interroge le vrai serveur à la place du client
 En général, c'est le même serveur qui assure le rôle de proxy
et de cache
 L'utilisation d'un proxy-cache peut être demandée librement
par le client, voire lui être imposée (en re-dirigeant les
requêtes HTTP vers l'extérieur du réseau vers le proxy-cache)

107 © Mohamed Hadj Kacem AU : 2020 - 2021


Serveur proxy
 Prenons le cas d’un client devant passer par un proxy afin de pouvoir
envoyer des requêtes HTTP sur Internet

Serveur Web
Serveur proxy

Clients

108 © Mohamed Hadj Kacem AU : 2020 - 2021


Serveur proxy
 Le proxy nécessite une authentification du client et va pour se faire utiliser
l’en-tête Proxy-authenticate
 1. Le client va établir une connexion TCP entre lui et le proxy puis il va
envoyer au proxy sa requête HTTP
 2. Le client n’étant pas encore authentifié, le proxy va lui retourner une
réponse possédant l’en-tête proxy-authenticate
 3. Le client recommence sa requête en y ajoutant les données
d’authentification demandées par le serveur. Les données
d’authentification sont placées dans l’en-tête proxy-authorization
 4. Une fois le client correctement authentifié, le proxy établit alors une
connexion TCP avec le serveur demandé puis lui transmet la requête
émise par le client. L’en-tête proxy-authorization n’est pas transmise par
le proxy

109 © Mohamed Hadj Kacem AU : 2020 - 2021


Serveur proxy
Get www.google.fr HTTP/1.1
Host: www.google.fr

HTTP/1.1 407 Proxy authentication required


Proxy-authenticate: Basic realm=private

Get www.google.fr HTTP/1.1 Serveur proxy Serveur Web


proxy-authorization: Basic U:P
Get www.google.fr HTTP/1.1
Host: www.google.fr

 Les en-têtes proxy-authenticate et proxy-authorization n’ont de sens que pour


la communication entre le client et le proxy.
 Ces en-têtes ne doivent pas être transmises

110 © Mohamed Hadj Kacem AU : 2020 - 2021


Serveur proxy
Get /site/social.html HTTP/1.1
Host: www.social.com

HTTP/1.1 407 Proxy authentication required


Proxy-authenticate: Basic realm=private

Get /site/social.html HTTP/1.1 Serveur proxy Serveur Web


Host: www.social.com
Get /site/social.html HTTP/1.1
proxy-authorization: Basic aGVsbG86d29ybGQ=
Host: www.social.com

HTTP/1.1 200 OK
Get /site/twitter.jpg HTTP/1.1
Host: www.social.com

HTTP/1.1 200 OK
Get /site/facebook.jpg HTTP/1.1
Host: www.social.com

HTTP/1.1 200 OK

111 © Mohamed Hadj Kacem AU : 2020 - 2021


Authentification
 L’accès à certains documents peut nécessiter une
authentification du client
 Dans la version 1.0 du protocole HTTP, seule
l’authentification de type Basic était disponible
 La version 1.1 ajoute l’authentification de type Digest

112 © Mohamed Hadj Kacem AU : 2020 - 2021


Mode Basic
 GET http://www.google.fr HTTP/1.1

 Pour consulter une page Web, le navigateur envoie une


requête HTTP au serveur contenant l’URL du document à
obtenir

113 © Mohamed Hadj Kacem AU : 2020 - 2021


Mode Basic
 HTTP/1.1 407 Proxy authentication required
 Proxy-authenticate: Basic realm=private

 Le serveur va retourner au navigateur une réponse HTTP


possédant un code de statut 407 (authentication required)

114 © Mohamed Hadj Kacem AU : 2020 - 2021


Mode Basic
 L’en-tête proxy-authenticate est suivie par le nom de la
méthode d’authentification (Basic)

 BASIC = Encodage_Base_64 (username:password)

 L’en-tête proxy-authenticate indique également auprès de quel


domaine (realm) l’utilisateur doit s’authentifier. Exemple :
Intranet, private, isims, étudiant

115 © Mohamed Hadj Kacem AU : 2020 - 2021


Mode Basic
 GET http://www.google.fr HTTP/1.1
 proxy-authorization: Basic U:P

 Le client refait sa requête en y ajoutant son


Username:Password (séparés par ‘ : ‘) encodé au format BASIC,
comme demandé par l’en-tête proxy-Authenticate
 BASIC = Encodage_Base_64(username:password)

116 © Mohamed Hadj Kacem AU : 2020 - 2021


Mode Basic
 Pas de confidentialité
 Login et mot de passe sont presque clair (base64)
 Sécurité minable
 Pas pour protéger des documents
 Ou nécessite un chiffrage supplémentaire (SSL)

118 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice : Authentification
 Soit un répertoire hébergé sur un serveur Web Apache/1.3.34
 Le répertoire est hébergé sur le lien :
www.redcad.org/members/hadjkacemm/exercicep/
 Et sur le host : www.redcad.org
 Le répertoire est protégé par un login et un mot de passe :
mohamed:hkm4c
 L'authentification est "Basic" bW9oYW1lZDpoa200Yw==
 La date de création du répertoire sur le serveur : Mardi, 05 Oct 2010
14:49:26 GMT
 Un échange requête-réponse est initié par un navigateur client de type
Mozilla/5.0
Présenter les requêtes et les réponses nécessaires
selon les cas suivants
119 © Mohamed Hadj Kacem AU : 2020 - 2021
Exercice : Authentification
 Cas N°1 : envoyer une requête sans authentification

GET /members/hadjkacemm/exercicep/ HTTP/1.1


Host: www.redcad.org
Connection: Keep-Alive
User-Agent: Mozilla/5.0
Accept: text/html, image/*
Accept-Encoding: x-gzip
Accept-Charset: iso-8859-1
Accept-Language: fr, en

120 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice : Authentification
 Cas N°1 : envoyer une requête sans authentification
HTTP/1.1 401 Non autorisé
Date: Mon, 18 Oct 2010 13:34:05 GMT
Server: Apache/1.3.34
WWW-Authenticate: Basic realm="isims"
Last-Modified: Tue, 05 Oct 2010 14:49:26 GMT
ETag: "2ce0c-31c-323c7c60"
Accept-Ranges: bytes
Content-Length: 796
Keep-Alive: timeout=15, max=300
Connection: Keep-Alive
Content-Type: text/html
Accept-Charset:iso-8859-1

121 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice : Authentification
Ligne vide
<html>
<head>
<title>Erreur 401: Nécessite une autorisation</title>
</head>
<body>
<h2>Erreur 401: Nécessite une autorisation</h2>
Le document est protégé par un login et un mot de passe.
Contactez le responsable de ce site
<a href=…</a>
</body>
</html>
122 © Mohamed Hadj Kacem AU : 2020 - 2021
Exercice : Authentification

123 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice : Authentification
 Cas N°2 : envoyer une requête avec authentification
GET /members/hadjkacemm/exercicep/ HTTP/1.1
Host: www.redcad.org
Connection: Keep-Alive
User-Agent: Mozilla/5.0
Accept: text/html, image/*
Accept-Encoding: x-gzip
Accept-Charset: iso-8859-1
Accept-Language: fr,en
Authorization: Basic bW9oYW1lZDpoa200Yw== realm="isims"

124 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice : Authentification
 Cas N°2 : envoyer une requête avec authentification

HTTP/1.1 200 OK
Date: Mon, 18 Oct 2010 19:28:02 GMT
Server: Apache/1.3.34
Keep-Alive: timeout=15, max=300
Connection: Keep-Alive
Content-Type: text/html
Accept-charset:iso-8859-1
ETag: "2ce0c-31c-323c7c60"

125 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice : Authentification
Ligne vide
<html>
<head>
<title> Exercice Authentification </title>
</head>
<body>
...
</body>
</html>

126 © Mohamed Hadj Kacem AU : 2020 - 2021


Redirection
 Lorsque le serveur renvoie un code de statut de la série 3xx, il
accompagne sa réponse d’un en-tête Location indiquant la
nouvelle adresse du site web
 Dans ce cas, le navigateur va automatiquement émettre une
requête vers cette nouvelle adresse

129 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice
 Soit la page web suivante (équipes.html) composée par 3 images
(CSS.jpg, EST.png et CA.jpg) et un texte

 Soit les hypothèses suivantes :


 Les ressources sont hébergées sur un serveur Web de type IIS7.0
 Les ressources sont hébergées sur le lien : www.equipes.tn/champ/...

130 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice
 Sur le host : www.equipes.tn
 Le client utilise un navigateur de type FireFox 3.6.25
 Sans fermeture de la connexion
 La date d’hébergement de l’image CA.jpg sur le serveur : Ven, 04
Nov 2011 17:00:00 GMT
 La date d’hébergement de l’image EST.png sur le serveur : Mer, 16
Nov 2011 14:49:26 GMT
 La date d’hébergement de la page web équipes.html sur le serveur :
Mer, 23 Nov 2011 14:49:26 GMT
 La date d’hébergement de l’image CSS.jpg sur le serveur : Mer, 28
Nov 2011 19:00:33 GMT
 La ressource EST.png a changé d’adresse temporairement vers
www.equipes.com/champ/... : Jeu, 24 Nov 2011 16:20:13 GMT
 La ressource EST.png a été transférée vers
www.equipe.com/champ/... : Ven, 02 Déc 2011 18:22:12 GMT

131 © Mohamed Hadj Kacem AU : 2020 - 2021


Question 1
 Après le transfert de l’image EST.png vers une autre URL,
on ne veut pas avoir un message d’erreur de page
introuvable. Proposez une solution

 Réponse
 Vous devez rediriger les requêtes de l’ancien site web
vers une page spécifique d’un nouveau site

133 © Mohamed Hadj Kacem AU : 2020 - 2021


Question 2
 Le client veut juste tester la connexion avec le serveur.
Quelle méthode faut-il utiliser ?

 Réponse
 TRACE

134 © Mohamed Hadj Kacem AU : 2020 - 2021


Question 3
 Formuler schématiquement les requêtes et les
réponses nécessaires selon les cas suivants :
 Le client veut récupérer seulement des informations sur
l’image CSS.jpg sans contenu. La date d’échange requête-
réponse est le Mer 03 Jan 2012 15:30:00 GMT

135 © Mohamed Hadj Kacem AU : 2020 - 2021


Question 3
Établissement TCP

HEAD /champ/CSS.jpg HTTP/1.1


Host: www.equipes.tn
Connection: keep-alive
User-Agent: Mozilla/3.6.25
Accept: text/html, image/*

HTTP/1.1 200 OK
Date: Tue, 03 Jan 2012 15:30:00 GMT Serveur Web
Client
Server: IIS/7.0
Last-Modified:Wed, 28 Nov 2011 19:00:33 GMT
Keep-Alive: timeout=15, max=300
ETag: "3d30556"
Accept-Ranges: bytes
Content-Length: 2184
Libération TCP

136 © Mohamed Hadj Kacem AU : 2020 - 2021


Question 4
 Le client demande l’image CA.jpg. La date d’échange
requête-réponse est le Lun 02 Jan 2012 11:30:00 GMT.
Lors de l’envoi, nous avons remarqué que seulement une
partie de la requête a été transmise

137 © Mohamed Hadj Kacem AU : 2020 - 2021


Question 4
Établissement TCP

GET /champ/CA.jpg HTTP/1.1


Host: www.equipes.tn
Connection: keep-alive
User-Agent: Mozilla/3.6.25
Accept: text/html, image/*
Accept-Charset: iso-8859-1
Accept-Language: fr,en
HTTP/1.1 206 Partial Content
Date: Mon, 02 Jan 2012 11:30:00 GMT Serveur Web
Client Server: IIS/7.0
Keep-Alive: timeout=15, max=300
Accept-Ranges: bytes
Content-Length: 542

<html> … “Partial Content " …

Libération TCP

138 © Mohamed Hadj Kacem AU : 2020 - 2021


Question 5
 Le client demande l’image EST.png. La date d’échange
requête-réponse est le Dim, 27 Nov 2011 12:30:00 GMT

139 © Mohamed Hadj Kacem AU : 2020 - 2021


Question 5
Établissement TCP

GET /champ/EST.png HTTP/1.1


Host: www.equipes.tn
Connection: keep-alive
User-Agent: Mozilla/3.6.25
Accept: text/html, image/*
Accept-Encoding: x-gzip
Accept-Charset: iso-8859-1
Accept-Language: fr,en Serveur Web
Client
HTTP/1.1 302 temporairement déplacé
Location : http://equipes.com/champ/EST.png

140 © Mohamed Hadj Kacem AU : 2020 - 2021


Question 5

GET /champ/EST.png HTTP/1.1


Host: www.equipes.com
Connection: keep-alive
User-Agent: Mozilla/3.6.25
Accept: text/html, image/*
Accept-Encoding: x-gzip
Accept-Language: fr,en
HTTP/1.1 200 OK
Date: Sun, 27 Nov 2011 12:30:00 GMT Serveur Web
Client
Server: IIS/7.0
Keep-Alive: timeout=15, max=300
ETag: "3d30500"
Accept-Ranges: bytes
Content-Length: 2232

Data (image : EST.png)


Libération TCP

141 © Mohamed Hadj Kacem AU : 2020 - 2021


Question 6
 Le client demande l’image EST.png. La date d’échange
requête-réponse est le Ven, 02 Dec 2011 18:30:00 GMT

142 © Mohamed Hadj Kacem AU : 2020 - 2021


Question 6
Établissement TCP

GET /champ/EST.png HTTP/1.1


Host: www.equipes.tn
Connection: keep-alive
User-Agent: Mozilla/3.6.25
Accept: text/html, image/*
Accept-Encoding: x-gzip
Accept-Charset: iso-8859-1
Accept-Language: fr,en Serveur Web
Client
HTTP/1.1 301 déplacé
Location : http://equipe.com/champ/EST.png

143 © Mohamed Hadj Kacem AU : 2020 - 2021


Question 6

GET /champ/EST.png HTTP/1.1


Host: www.equipe.com
Connection: keep-alive
User-Agent: Mozilla/3.6.25
Accept: text/html, image/*
Accept-Encoding: x-gzip
Accept-Language: fr,en
HTTP/1.1 200 OK
Date: Fri, 02 Dec 2011 18:30:00 GMT Serveur Web
Client Server: IIS/7.0
Last-modified: Fri, 02 Dec 2011 18:22:12 GMT
Keep-Alive: timeout=15, max=300
ETag: "3d30608"
Accept-Ranges: bytes
Content-Length: 2232

Data (image : EST.png)


Libération TCP

144 © Mohamed Hadj Kacem AU : 2020 - 2021


Keep-Alive
 Pour que le support Keep-Alive puisse être exploité, il
faut que le navigateur client le supporte.
 De nombreux navigateurs actuels, y compris Netscape
Navigator 2.0, et Microsoft Internet Explorer le font.
 Le support Keep-Alive n'est actif que pour des fichiers
dont la longueur est connue à l'avance.
 Les scripts CGI, les Server-Side Includes et les affichages de
répertoires ne pourront pas utiliser le protocole Keep-Alive.

145 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice
 Soit la page web suivante (social.html) composée par 2
images (facebook.jpg, twiter.jpg) et un texte.

146 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice
 Soit les hypothèses suivantes :
 Les ressources sont hébergées sur un serveur Web de type apache
2.3
 Les ressources sont hébergées sur le lien : www.social.com/site/...
 Sur le host : www.social.com
 Le client utilise un navigateur de type FireFox 3.6.25
 Sans fermeture de la connexion
 Avec utilisation d’un serveur Proxy
 La date d’hébergement de l’image Facebook.jpg sur le serveur : Jeu,
27 Dec 2012 17:00:00 GMT
 La date d’hébergement de l’image Twitter.jpg sur le serveur : Ven, 30
Nov 2012 14:49:26 GMT
 La date d’hébergement de la page web social.html sur le serveur :
Mar, 01 Jan 2013 08:19:06 GMT

147 © Mohamed Hadj Kacem AU : 2020 - 2021


Question 1
 Nous souhaitons stocker le fichier Twitter.jpg sur le
serveur.
 Quelle méthode faut-il utiliser ?
 PUT
 Ecrire la ligne de commande correspondante
 PUT www.social.com/site /Twitter.jpg HTTP/1.1

148 © Mohamed Hadj Kacem AU : 2020 - 2021


Question 1
 Nous souhaitons supprimer le fichier Twitter.jpg du
serveur.
 Quelle méthode faut-il utiliser ?
 DELETE
 Ecrire la ligne de commande correspondante
 Delete www.social.com/site /Twitter.jpg HTTP/1.1

149 © Mohamed Hadj Kacem AU : 2020 - 2021


Question 1
 Nous supposons que la méthode de suppression n’est pas
supportée par le serveur.
 Quel est le code de statut retourné par le serveur ?
 501
 Ecrire la ligne de statut correspondante
 HTTP/1.1 501 operation not supported

150 © Mohamed Hadj Kacem AU : 2020 - 2021


Question 2
 Le client demande la page social.html. La date d’échange
requête-réponse est le Mercredi 04 Jan 2013 11:30:00
GMT.
 Expliquer schématiquement l’échange requête/réponse
sachant que le proxy est protégé par un login et un mot
de passe : isims2013:iwm codé selon le mode Basic qui
est : aGVsbG86d29ybGQ=

151 © Mohamed Hadj Kacem AU : 2020 - 2021


Question 2
Etablissement TCP

Get www.social/site/social.html HTTP/1.1

HTTP/1.1 200 OK

HTTP/1.1 200 OK

HTTP/1.1 200 OK
Libération TCP
152 © Mohamed Hadj Kacem AU : 2020 - 2021
Cookies
 Le protocole HTTP ne possède pas de mécanisme de session
 Pour pallier ce manque, Netscape a créé les cookies afin de
fournir au protocole HTTP un mécanisme de gestion d’états
 Les cookies permettent au serveur de mémoriser des
données du côté client. Cela permet un suivi de l’utilisateur
d’une requête à l’autre et d’implémenter ainsi la notion de
session
 Afin de donner l’ordre au client de créer un cookie, le serveur
place un en-tête Set-Cookie dans sa réponse
 comprenant :
 le nom du cookie
 sa valeur
 son contexte (path)
 sa date d’expiration

153 © Mohamed Hadj Kacem AU : 2020 - 2021


Cookies
SESSION ID
Login Sessionid
POST Username
Username=mohamed createDate
Password=mohamedh Login successful? expireDate
1. create session id lastAccessDate
2. return session id in cookie
3. store session id in database

Set-Cookie: SESSIONID=hkm4c

Cookie: SESSIONID=hkm4c Database

Lookup Session ID
1. session match a username ?
Content for ‘mohamed’ 2. session still valid ?

154 © Mohamed Hadj Kacem AU : 2020 - 2021


Cookies
 Le schéma de séquence suivant symbolise un client qui, après avoir
rempli un formulaire (username/password) :
 1. Envoi (Post) les données à un script login.cgi
 2. Le serveur informe le client que les données ont été
correctement reçues par le script (201 créé) et demande au
client de créer un cookie ayant pour valeur SESSID=hkm4c et
expirant le 06/12/2018 à 18:06:56
 3. Le client effectue une requête pour obtenir le fichier index.html
en joignant à la requête le cookie créé en 2
 4. Après avoir vérifié que la valeur SESSID correspondait bien à
une session valide, le serveur renvoie le fichier demandé au client

156 © Mohamed Hadj Kacem AU : 2020 - 2021


Cookies
1/ POST /login.cgi HTTP/1.1

2/ HTTP/1.1 201 Créé


Set-Cookie: SESSID=hkm4c
Expires=06/12/2018 18:06:56

3/ Get /index.html HTTP/1.1


Cookie: SESSID=hkm4c

4/ HTTP/1.1 200 OK

 Un cookie est souvent utilisé afin de mémoriser :


 Une clé de session à validité limitée
 Les préférences de l’utilisateur concernant un site Web
 Les achats réalisés par l’utilisateur, etc.

157 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice : les Cookies

cookies_exemple.html

158 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice : les Cookies

159 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice : les Cookies

160 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice : les Cookies

161 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice : les Cookies
GET /members/hadjkacemm/exercice/cookies_exemple.html HTTP/1.1
Host: www.redcad.org
User-Agent: Mozilla/5.0
Accept: text/html
Accept-Language: fr
Accept-Encoding: gzip
Accept-Charset: ISO-8859-1
Keep-Alive: timeout=5, max=100
Connection: keep-alive
Cookie: SESSID=azereza121; visites=2; derniere=22-10-2017; nom=HADJ
KACEM; couleur=%23ffcccc

162 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice : les Cookies

163 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice : les Cookies
HTTP/1.1 200 OK
Date: Mon, 22 Oct 2017 21:07:33 GMT
Server:Apache/2.3.5
Last-Modified: Mon, 18 Oct 2010 22:53:44 GMT
ETag: "3d30579-1829-492ec0c59ee00"
Set-Cookie: SESSID=azereza121; visites=3; duree_cookie = 100;
derniere=22-10-2017; nom=TOUNSI; couleur=%23ccffcc
Accept-Ranges: bytes
Content-Length: 6185
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html

164 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice : les Cookies
Ligne vide
<HTML>
<HEAD>
<TITLE>Exemple de manipulation de cookies par JavaScript</TITLE>
<SCRIPT LANGUAGE="JavaScript">

165 © Mohamed Hadj Kacem AU : 2020 - 2021


Referer
 Referer : URL de l’objet d’où provient la requête (URL de
la page où se trouve le lien)

166 © Mohamed Hadj Kacem AU : 2020 - 2021


Chunked transfer encoding
 Chunked transfer encoding (ou Encodage de transfert en
bloc) est un mécanisme de transfert de données de HTTP 1.1
 Il permet à un serveur ou à un client de commencer à
transmettre des données par blocs sans avoir à connaître à
l'avance la taille totale des données qui seront transmises
 La taille de chaque bloc est envoyé juste avant le bloc lui-
même afin que le serveur puisse dire au client quand il a fini de
recevoir les données de ce bloc
 Le transfert total d'un fichier encodé par blocs se termine par
un bloc final avec un contenu nul

167 © Mohamed Hadj Kacem AU : 2020 - 2021


Chunked transfer encoding
 L'encodage de transfert en bloc du protocole HTTP 1.1 a
un certain nombre d'avantages :
 Permettre à un serveur de maintenir une connexion HTTP
persistante pour un contenu généré dynamiquement
 Permettre à l'expéditeur d'envoyer des en-têtes
supplémentaires après le corps du message
 Sans l'encodage de transfert en bloc, l'expéditeur devrait
tamponner le contenu jusqu'à ce qu'il soit complété afin de
calculer une valeur et l'envoyer avant le contenu
 Syntaxe :
Transfer-Encoding: chunked

168 © Mohamed Hadj Kacem AU : 2020 - 2021


Chunked transfer encoding
 Un corps de message de type chunked contient :
 Une série de "chunks"
 Suivi d’une ligne 0 (zero)
 et une ligne blanche
 Chaque chunk est constitué de :
 Une ligne contenant la taille du chunk en hexadecimal, suivi
éventuellement d'un point-virgule et de paramètres
supplémentaires, qu'il est possible d'ignorer
 Les données

169 © Mohamed Hadj Kacem AU : 2020 - 2021


Chunked transfer encoding
 Ainsi, une réponse de type chunked peut ressembler à :

HTTP/1.1 200 Ok
Content-Type: text/plain
Transfer-Encoding: chunked
6; bonjour
ZYXWVT
10
0123456789ABCDEF
0
Ligne vide

170 © Mohamed Hadj Kacem AU : 2020 - 2021


Chunked transfer encoding
 La longueur de la ressource est : 22
 (10h + 6h = 16 + 6 = 22)
 Les données sont :
 ZYXWVT0123456789ABCDEF

171 © Mohamed Hadj Kacem AU : 2020 - 2021


Chunked transfer encoding
 Pour comparaison, le message ci-dessus serait transmis s'il
n'était pas sous forme chunked :

HTTP/1.1 200 Ok
Content-Type: text/plain
Content-Length: 22

ZYXWVT0123456789ABCDEF

Ce message n'a pas de lignes blanches à la fin

172 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice
HTTP/1.1 200 Ok
Content-Type: text/plain
Transfer-Encoding: chunked
B; Examen
Création et
1F
Administration des serveurs Web
0

173 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice
HTTP/1.1 200 Ok  C’est une réponse de type
Content-Type: text/plain chunked
Transfer-Encoding: chunked  Taille du chunk en
hexadécimal (11)
B; Examen
 À ignorer
Création et
 Des données de taille 11 (B)
1F
Administration des serveurs
Web  Des données de taille 31 (1F)
0  Ligne 0
 Ligne vide

174 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice
 http://www.redcad.org/members/hadjkacemm/exercice/
form_post.html

 http://www.redcad.org/members/hadjkacemm/exercice/form_p
ost.php
175 © Mohamed Hadj Kacem AU : 2020 - 2021
Exercice : Post
POST /members/hadjkacemm/exercice/form_post.php HTTP/1.1
Host: www.redcad.org
Content-Length: 45
Referer : http://www. redcad.org/members/hadjkacemm/exercice/form_post.html
Accept: text/html
Accept-Language: fr
Accept-Charset: windows-1252,utf-8;q=0.7,*;q=0.3
Keep-Alive: 115
Cache-Control: max-age=0

valeur1=Bonjour&valeur2=Etudiants&valeur3=ISIMS&submit=Envoyer

176 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice : Post
HTTP/1.1 201 Créé <html>
Date: Mon, 22 Oct 2012 21:10:16 GMT <head>
Server: Apache/1.3.34 <title>Exemple Post</title>
Keep-Alive: timeout=15, max=300 </head>
Connection: Keep-Alive
<body>
Transfer-Encoding: chunked
<?php
Content-Type: text/*
echo "Récapitulatif des informations
charset=UTF-8
saisies
26
Ch1: $valeur1
Récapitulatif des informations saisies
Ch2: $valeur2
7
Bonjour Ch3: $valeur3";
9 ?>
Etudiants </body>
5 </html>
ISIMS
0 Réponse par blocs

177 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice
 Soit la page web suivante (serveur.html) composée par 3
images (Apache.png, IIS.png et AOL.jpg), un texte, un
formulaire (zone de texte pour saisir le nom du serveur
préféré) et un bouton (envoyer).
 En cliquant sur le bouton « Envoyer » la page choix.php
sera invoquée. Cette page contient un titre <h2
align=center> Nom Serveur </h2> et un texte descriptif.

179 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice

180 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice
 Soit les hypothèses suivantes :
 Le client dispose d’un cache qui garde une copie des
ressources pour une durée maximale égale à 45 jours
 Les ressources sont hébergées sur un serveur Web de type
IIS/7.5
 Les ressources sont hébergées sur le lien :
www.isims.rnu.tn/exer/...
 Sur le host : www.isims.rnu.tn
 La date d’hébergement de l’image AOL.jpg sur le serveur : Ven,
27 Aoû 2010 08:00:00 GMT
 La date d’hébergement de l’image IIS.png sur le serveur : Mer,
08 Sep 2010 14:49:26 GMT
 La date d’hébergement de la page web serveur.html sur le
serveur : Mer, 05 Oct 2010 14:49:26 GMT

181 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice
 La date d’hébergement de l’image Apache.png sur le serveur :
Mer, 05 Oct 2010 14:49:26 GMT
 La date d’hébergement de la page web choix.php sur le
serveur : Mar 16 Nov 2010 16:00:00 GMT
 Le client a demandé les ressources quatre fois en envoyant :
 une 1ère requête pour demander l’image Apache.png : Mer, 05 Oct 2010
12:30:00 GMT
 une 2ème requête pour demander l’image IIS.png : Sam 30 Oct 2010
14:45:00 GMT
 une 3ème requête pour demander l’image Apache.png : Dim 05 Dec 2010
11:35:00 GMT
 une 4ème requête pour demander la page serveur.html : Ven 10 Dec 2010
12:40:16 GMT
 Le client utilise un navigateur de type IE/7.0
 Sans fermeture de la connexion

182 © Mohamed Hadj Kacem AU : 2020 - 2021


Question
1. En tenant compte des hypothèses précédentes, présenter
schématiquement la connexion HTTP entre un client et
un serveur Web, pour l’échange de toutes les données, dans
le cas d’une connexion http/1.1. La date d’échange requête-
réponse est le Lun 03 Jan 2011 11:30:00 GMT
Formuler les requêtes et les réponses nécessaires selon les cas
suivants :
2. Le client veut récupérer seulement des informations sur la
page serveur.html sans contenu. La date d’échange requête-
réponse est le Lun 03 Jan 2011 11:30:00 GMT
3. Le client demande la page choix.php. La date d’échange
requête-réponse est le Lun 03 Jan 2011 11:30:00 GMT
4. Le client demande l’image Apache.png. La date d’échange
requête-réponse est le Mer, 05 Oct 2010 12:30:00 GMT

183 © Mohamed Hadj Kacem AU : 2020 - 2021


Question 1
 En tenant compte des hypothèses précédentes, présenter
schématiquement la connexion HTTP entre un client
et un serveur Web, pour l’échange de toutes les données,
dans le cas d’une connexion http/1.1.
 La date d’échange requête-réponse est le Lun 03 Jan 2011
11:30:00 GMT

184 © Mohamed Hadj Kacem AU : 2020 - 2021


Série TD : Question 1
Établissement TCP

Get /exer/serveur.html HTTP/1.1


Host: www.isims.rnu.tn
Connection: keep-alive
HTTP/1.1 304 Non modifié
Cache-Control: max-age=3888000
Expires: Man, 24 Jan 2011 12:40:16 GMT
Last-Modified:Wed, 05 Oct 2010 14:49:26 GMT
Serveur Web
Client
Get /exer/IIS.png HTTP/1.1
Host: www.isims.rnu.tn
Connection: keep-alive
HTTP/1.1 200 OK
Cache-Control: max-age=3888000
Expires:Thu, 14 Dec 2010 14:45:00 GMT
Last-Modified:Wed, 08 Sep 2010 14:49:26 GMT

185 © Mohamed Hadj Kacem AU : 2020 - 2021


Série TD : Question 1
Get /exer/AOL.jpg HTTP/1.1
Host: www.isims.rnu.tn
Connection: keep-alive
HTTP/1.1 304 Non modifié
Cache-Control: max-age=3888000
Expires: Man, 24 Jan 2011 12:40:16 GMT
Last-Modified: Fri, 27 Aug 2010 08:00:00 GMT

Get /exer/Apache.png HTTP/1.1 Serveur Web


Client Host: www.isims.rnu.tn
Connection: keep-alive
HTTP/1.1 304 Non modifié
Cache-Control: max-age=3888000
Expires:Wed, 19 Jan 2011 11:35:00 GMT
Last-Modified:Wed, 05 Oct 2010 14:49:26 GMT

186 © Mohamed Hadj Kacem AU : 2020 - 2021


Série TD : Question 1

Post /exer/choix.php HTTP/1.1


Host: www.isims.rnu.tn
Referer /exer/serveur.html
Connection: keep-alive

HTTP/1.1 200 Ok
Cache-Control: max-age=3888000
Last-Modified: Man, 03 Jan 2011 11:30:00 GMT
Serveur Web
Client

Libération TCP

187 © Mohamed Hadj Kacem AU : 2020 - 2021


Série TD : Question 2
 Le client veut récupérer seulement des informations sur la
page serveur.html sans contenu
 La date d’échange requête-réponse est le Lun 03 Jan 2011
11:30:00 GMT

 Requête
HEAD /exer/serveur.html HTTP/1.1
Host: www.isims.rnu.tn
Connection: keep-alive
<nouvelle ligne>

188 © Mohamed Hadj Kacem AU : 2020 - 2021


Série TD : Question 2
 Réponse
http/1.1 304 Not Modified
Date: Lun 03 Jan 2011 11:30:00 GMT
Server: IIS/7.5
Keep-Alive: timeout=15, max=300

189 © Mohamed Hadj Kacem AU : 2020 - 2021


Série TD : Question 3
 Le client demande la page choix.php
 La date d’échange requête-réponse est le Lun 03 Jan 2011 11:30:00 GM

 Requête Accept-Charset: ISO-8859-1


POST /exer/choix.php HTTP/1.1 Keep-Alive: 115
Content-Length: 14 Connection: keep-alive
Host: www.isims.rnu.tn
Referer: valeur1=Apache&submit=Envoyer
http://www.isims.rnu.tn/exer/se
rveur.html
Accept: text/html
Accept-Language: fr
Accept-Encoding: gzip

190 © Mohamed Hadj Kacem AU : 2020 - 2021


Exercice : Post
HTTP/1.1 201 Crée <html>
Date: Lun 03 Jan 2011 11:30:00 <head>
GMT <title>Exemple Post</title>
Server: IIS/7.5 </head>
Keep-Alive: timeout=15, max=300 <body>
Connection: Keep-Alive <?php
Transfer-Encoding: chunked
echo "Récapitulatif des informations
Content-Type: text/html saisies
Content-charset= iso-8859-1 $valeur1
26 ?>
Récapitulatif des informations saisies
</body>
6
</html>
Apache
0

192 © Mohamed Hadj Kacem AU : 2020 - 2021


Série TD : Question 4
 Le client demande l’image Apache.png
 La date d’échange requête-réponse est le Mer, 05 Oct 2010
12:30:00 GMT

 Requête
GET /exer/Apache.png HTTP/1.1
Connection: Keep-Alive
User-Agent: IE/7.0
Accept: image/png, text/html
Accept-Encoding: x-gzip
Accept-Charset: iso-8859-1
Accept-Language: fr, en
Host: www.isims.rnu.tn

193 © Mohamed Hadj Kacem AU : 2020 - 2021


Série TD : Question 4
 Réponse
HTTP/1.1 404 Not Found
Date: Mer, 05 Oct 2010 12:30:00 GMT
Server: IIS/7.5
Accept-Ranges: bytes
Content-Length:16
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: image/png, text/html

<html>
<body>
<p>Page non trouvée</p>
</body>
</html>

194 © Mohamed Hadj Kacem AU : 2020 - 2021


Question 5
 On suppose que la liaison entre le client et le serveur Web est
protégée par un serveur Proxy
 L'authentification est "Basic" bW9oYW1lZDpoa200Yw==
 En tenant compte des hypothèses précédentes, présenter
schématiquement la connexion HTTP entre le client et le
serveur Web, pour répondre à la 3ème requête (demander
l’image Apache.png), dans le cas d’une connexion http/1.1
 La date d’échange requête-réponse est le Dim 12 Dec 2010
11:35:00 GMT. Présenter ces deux cas :
 Envoyer une requête sans authentification
 Envoyer une requête avec authentification

195 © Mohamed Hadj Kacem AU : 2020 - 2021


Question 5 : sans authentification
Établissement TCP

Get /exer/apache.png HTTP/1.1


Host: www.isims.rnu.tn
Connection: keep-alive
Serveur Web
Serveur proxy
HTTP/1.1 407 Proxy authentication required
Proxy-authenticate: Basic realm=private

Libération TCP

196 © Mohamed Hadj Kacem AU : 2020 - 2021


Question 5 : avec authentification
Établissement TCP
Get /exer/apache.png HTTP/1.1
Host: www.isims.rnu.tn
Connection: keep-alive
HTTP/1.1 407 Proxy authentication required
Proxy-authenticate: Basic realm=private Serveur Web
Serveur proxy

Get /exer/apache.png HTTP/1.1


Get /exer/apache.png HTTP/1.1
proxy-authorization: Basic bW9oYW1lZDpoa200Yw== realm=private
Host: www.isims.rnu.tn
Host: www.isims.rnu.tn
Connection: keep-alive
Connection: keep-alive
HTTP/1.1 304 Non modifié
Cache-Control: max-age=3888000
Expires:Wed, 19 Jan 2011 11:35:00 GMT
Last-Modified:Wed, 05 Oct 2010 14:49:26 GMT

Libération TCP
197 © Mohamed Hadj Kacem AU : 2020 - 2021

Vous aimerez peut-être aussi