HTTP
HTTP
M. BOUMEDIENE
27 avril 2021
1 Présentation de HTTP
2 Requêtes HTTP
4 Réponses HTTP
6 Un peu de pratique
Plan
1 Présentation de HTTP
2 Requêtes HTTP
4 Réponses HTTP
6 Un peu de pratique
Service web
Pour assurer le service web entre les clients et les serveurs il faut :
Service web
Pour assurer le service web entre les clients et les serveurs il faut :
Un espace de noms global pour identifier les pages web
⇒utiliser les URLs.
Service web
Pour assurer le service web entre les clients et les serveurs il faut :
Un espace de noms global pour identifier les pages web
⇒utiliser les URLs.
Un protocole pour le transfert des requêtes et réponses entre les clients et les serveurs
⇒le protocole HTTP
Service web
Pour assurer le service web entre les clients et les serveurs il faut :
Un espace de noms global pour identifier les pages web
⇒utiliser les URLs.
Un protocole pour le transfert des requêtes et réponses entre les clients et les serveurs
⇒le protocole HTTP
Un langage à balises (markup) pour la description de documents hypertextes, c’est le langage HTML
(HyperText Markup Language)
Plan
1 Présentation de HTTP
2 Requêtes HTTP
4 Réponses HTTP
6 Un peu de pratique
Méthode GET
GET permet à un client de demander un document web au serveur
Méthode GET
GET permet à un client de demander un document web au serveur
Par exemple, lorsqu’un client clique sur un lien, son navigateur envoie une requête GET au serveur en
spécifiant l’URL de la ressource demandée.
Méthode GET
GET permet à un client de demander un document web au serveur
Par exemple, lorsqu’un client clique sur un lien, son navigateur envoie une requête GET au serveur en
spécifiant l’URL de la ressource demandée.
Si le serveur peut satisfaire la demande ⇒ une réponse 200 OK est envoyée au navigateur client ainsi que
la ressource demandée ([Link])
Méthode GET
GET permet à un client de demander un document web au serveur
Par exemple, lorsqu’un client clique sur un lien, son navigateur envoie une requête GET au serveur en
spécifiant l’URL de la ressource demandée.
Si le serveur peut satisfaire la demande ⇒ une réponse 200 OK est envoyée au navigateur client ainsi que
la ressource demandée ([Link])
Dans le cas contraire, une réponse d’erreur est envoyée pour indiquer la non satisfaction de la requête
Méthode GET
Avec la méthode GET, le client peut transmettre des données au serveur et cela via la ligne de commande
Méthode GET
Avec la méthode GET, le client peut transmettre des données au serveur et cela via la ligne de commande
Cependant, il faut ajouter les données, qui sont sous forme d’un ensemble de variables, à l’URL spécifiée
Méthode GET
Avec la méthode GET, le client peut transmettre des données au serveur et cela via la ligne de commande
Cependant, il faut ajouter les données, qui sont sous forme d’un ensemble de variables, à l’URL spécifiée
GET /[Link]?variable1=valeur1&variable2=valeur2 HTTP/1.1
La liste des variables doit être séparée de l’URL par "?",
Les variables sont séparées entre elles par "&".
Méthode GET
Avec la méthode GET, le client peut transmettre des données au serveur et cela via la ligne de commande
Cependant, il faut ajouter les données, qui sont sous forme d’un ensemble de variables, à l’URL spécifiée
GET /[Link]?variable1=valeur1&variable2=valeur2 HTTP/1.1
La liste des variables doit être séparée de l’URL par "?",
Les variables sont séparées entre elles par "&".
Les données envoyées au serveur apparaissent en clair dans l’URL et ne peuvent dépasser une taille limite
(2000 caractères)
Methode POST
POST est similaire à la méthode GET
Methode POST
POST est similaire à la méthode GET
Les données sont envoyées via le corps de la requête et non par l’URL
Methode POST
POST est similaire à la méthode GET
Les données sont envoyées via le corps de la requête et non par l’URL
POST est généralement utilisée pour demander un traitement au serveur
Methode POST
POST est similaire à la méthode GET
Les données sont envoyées via le corps de la requête et non par l’URL
POST est généralement utilisée pour demander un traitement au serveur
Le serveur retourne le résultat dans le corps d’une réponse 200 OK
Methode POST
POST est similaire à la méthode GET
Les données sont envoyées via le corps de la requête et non par l’URL
POST est généralement utilisée pour demander un traitement au serveur
Le serveur retourne le résultat dans le corps d’une réponse 200 OK
Dans le cas de problème, le serveur retourne au client une réponse d’erreur
Méthode PUT
PUT est similaire à la méthode POST
⇒Envoyer des données au serveur
Méthode PUT
PUT est similaire à la méthode POST
⇒Envoyer des données au serveur
Avec POST l’URL identifie la ressource qui traite les données sur le serveur
⇒URL indique un programme ou un script
Méthode PUT
PUT est similaire à la méthode POST
⇒Envoyer des données au serveur
Avec POST l’URL identifie la ressource qui traite les données sur le serveur
⇒URL indique un programme ou un script
avec PUT l’URL identifie la ressource que le serveur doit mettre à jour avec les données envoyées
⇒URL indique le chemin et le nom d’un fichier sauvegardé sur le serveur
Méthode DELETE
Méthode DELETE
Méthode DELETE
Méthode OPTIONS
OPTIONS permet à un client de se renseigner sur les capacités du serveur pour la prise en charge de HTTP
Méthode OPTIONS
OPTIONS permet à un client de se renseigner sur les capacités du serveur pour la prise en charge de HTTP
Si le client précise une URL dans la ligne de commande
⇒le serveur retourne les opérations/options possibles sur la ressource identifiée par cette URL
Méthode OPTIONS
OPTIONS permet à un client de se renseigner sur les capacités du serveur pour la prise en charge de HTTP
Si le client précise une URL dans la ligne de commande
⇒le serveur retourne les opérations/options possibles sur la ressource identifiée par cette URL
Si un "*" est mentionné à la place d’une URL
⇒ le serveur retourne ses options globales, c.-a.-d. sur l’ensemble de ses ressources
Méthode HEAD
HEAD est quasi-identique à GET excepté que la ressource demandée n’est pas retournée au client
Méthode HEAD
HEAD est quasi-identique à GET excepté que la ressource demandée n’est pas retournée au client
HEAD permet au client de vérifier l’existence d’une ressource sur le serveur
Méthode HEAD
HEAD est quasi-identique à GET excepté que la ressource demandée n’est pas retournée au client
HEAD permet au client de vérifier l’existence d’une ressource sur le serveur
Le serveur retourne une réponse avec un corps vide
HEAD est utilisée pour vérifier l’état des liens hypertextes sans pour autant consommer la bande passante
Méthode TRACE
TRACE sollicite le serveur pour qu’il retourne au client les en-têtes de la requête reçue dans le corps de la
réponse
Méthode TRACE
TRACE sollicite le serveur pour qu’il retourne au client les en-têtes de la requête reçue dans le corps de la
réponse
Le retour de ces en-têtes permet d’analyser la route entre le client et le serveur
⇒les proxies, les passerelles ou bien les pare-feux présents entre le client et le serveur
Méthode TRACE
TRACE sollicite le serveur pour qu’il retourne au client les en-têtes de la requête reçue dans le corps de la
réponse
Le retour de ces en-têtes permet d’analyser la route entre le client et le serveur
⇒les proxies, les passerelles ou bien les pare-feux présents entre le client et le serveur
Cette découverte est possible puisque les serveurs intermédiaires ont tendance à ajouter des en-têtes dans
les requêtes
Plan
1 Présentation de HTTP
2 Requêtes HTTP
4 Réponses HTTP
6 Un peu de pratique
Accept
Accept donne la possibilité au client d’indiquer quels types de contenu accepte-il dans le corps des
réponses envoyées
⇒Accept: text/plain; q=0.5, text/html, text/x-dvi; q=0.8
Accept
Accept donne la possibilité au client d’indiquer quels types de contenu accepte-il dans le corps des
réponses envoyées
⇒Accept: text/plain; q=0.5, text/html, text/x-dvi; q=0.8
Accept définit une liste de types de contenu, séparés par des virgules
Chaque type peut être associé à un facteur de qualité "q" traduisant la préférence relative du client
Ce facteur varie de 0 à 1, les types n’ayant pas facteur mentionné cela veut dire que q = 1
Ainsi, dans l’exemple le client peut accepter trois types de contenu:
text/plain; q=0.5
text/html
text/x-dvi; q=0.8
Accept-Charset
Accept-Charset permet au client de préciser au serveur sa préférence pour le jeu de caractères utilisé pour
l’encodages du contenu
Accept-Charset
Accept-Charset permet au client de préciser au serveur sa préférence pour le jeu de caractères utilisé pour
l’encodages du contenu
Accept-Charset se base sur la même notation que l’en-tête Accept
⇒Une liste de jeu de caractères est donnée ainsi que leur facteur de qualité
⇒Accept-Charset: unicode, *; q=0.8
Accept-Charset
Accept-Charset permet au client de préciser au serveur sa préférence pour le jeu de caractères utilisé pour
l’encodages du contenu
Accept-Charset se base sur la même notation que l’en-tête Accept
⇒Une liste de jeu de caractères est donnée ainsi que leur facteur de qualité
⇒Accept-Charset: unicode, *; q=0.8
Le client indique sa préférence pour le jeu de caractères Unicode
Accept-Charset
Accept-Charset permet au client de préciser au serveur sa préférence pour le jeu de caractères utilisé pour
l’encodages du contenu
Accept-Charset se base sur la même notation que l’en-tête Accept
⇒Une liste de jeu de caractères est donnée ainsi que leur facteur de qualité
⇒Accept-Charset: unicode, *; q=0.8
Le client indique sa préférence pour le jeu de caractères Unicode
Il indique aussi qu’il accepte tout autre type d’encodage (*) avec une préférence relative de 0.8
Accept-Encoding
Accept-Encoding liste les encodages acceptés par le client
Accept-Encoding
Accept-Encoding liste les encodages acceptés par le client
Accept-Encoding: compress, gzip; q=0.9, identity; q=0.8
Accept-Encoding
Accept-Encoding liste les encodages acceptés par le client
Accept-Encoding: compress, gzip; q=0.9, identity; q=0.8
Le client précise sa préférence pour un format compressé de unix compress, ensuite le format gzip
Accept-Encoding
Accept-Encoding liste les encodages acceptés par le client
Accept-Encoding: compress, gzip; q=0.9, identity; q=0.8
Le client précise sa préférence pour un format compressé de unix compress, ensuite le format gzip
Si ces formats ne sont pas supportés par le serveur, l’encodage identity peut-être utilisé
Identifiant Signification
compresse C’est le format de compression issu des systèmes Unix. Cet encodage est basé sur l’algorithme
est Lempel-Zip-Welch.
deflate Ce format est basé sur l’algorithme Lempel-Zip et le codage de Huffman.
gzip Le format GNU zip est une évolution de deflate. gzip est basé sur le codage Lempel-Zip et
un CRC de 32 bits.
identity Indique qu’aucune compression, ni modification n’a été apportée aux données.
br Le format Brotli est basé sur une variante moderne de Lempel-Zip et présente des perfor-
mances intéressantes point de vue temps de compression/decompression.
Accept-Language
Accept-Language laisse au client la possibilité de renseigner sa préférence pour la langue des réponses
Accept-Language
Accept-Language laisse au client la possibilité de renseigner sa préférence pour la langue des réponses
Il suffit juste de lister les langues acceptées
⇒Accept-Language: en-us, en-gb; q=0.8
Accept-Language
Accept-Language laisse au client la possibilité de renseigner sa préférence pour la langue des réponses
Il suffit juste de lister les langues acceptées
⇒Accept-Language: en-us, en-gb; q=0.8
Sur l’exemple, le client indique sa préférence pour l’anglais américain (en-us) par rapport à l’anglais
britannique (en-gb avec q=0.8)
Plan
1 Présentation de HTTP
2 Requêtes HTTP
4 Réponses HTTP
6 Un peu de pratique
Code d’état ou Statuts Code donne une information sur le déroulement du traitement de la requête
Code d’état ou Statuts Code donne une information sur le déroulement du traitement de la requête
Ces codes sont regroupés en 5 classes:
1xx : Information (pour notification)
2xx : Succès (la requête a été correctement reçue, interprétée, et exécutée)
3xx : Redirection (signale que la ressource demandée n’est pas à l’emplacement indiqué dans
la requête)
4xx : Erreur Client (la requête présente une erreur de forme et ne peut être satisfaite)
5xx : Erreur Serveur (la requête est valide, mais le serveur ne peut la satisfaire)
Plan
1 Présentation de HTTP
2 Requêtes HTTP
4 Réponses HTTP
6 Un peu de pratique
Content-Encoding
Content-Encoding spécifie quel encodage est utilisé par le serveur pour compresser le corps de sa réponse
Identifiant Signification
compresse C’est le format de compression issu des systèmes Unix. Cet encodage est basé sur l’algorithme est Lempel-Zip-Welch.
deflate Ce format est basé sur l’algorithme Lempel-Zip et le codage de Huffman.
gzip Le format GNU zip est une évolution de deflate. gzip est basé sur le codage Lempel-Zip et un CRC de 32 bits.
identity Indique qu’aucune compression, ni modification n’a été apportée aux données.
br Le format Brotli est basé sur une variante moderne de Lempel-Zip et présente des performances intéressantes point de vue
temps de compression/decompression.
Content-Encoding
Content-Encoding spécifie quel encodage est utilisé par le serveur pour compresser le corps de sa réponse
Il est utile de préciser que le serveur choisi un des encodages listés dans l’en-tête Accept-Encoding de la
requête ⇒ un des encodages accepté par le navigateur client
Identifiant Signification
compresse C’est le format de compression issu des systèmes Unix. Cet encodage est basé sur l’algorithme est Lempel-Zip-Welch.
deflate Ce format est basé sur l’algorithme Lempel-Zip et le codage de Huffman.
gzip Le format GNU zip est une évolution de deflate. gzip est basé sur le codage Lempel-Zip et un CRC de 32 bits.
identity Indique qu’aucune compression, ni modification n’a été apportée aux données.
br Le format Brotli est basé sur une variante moderne de Lempel-Zip et présente des performances intéressantes point de vue
temps de compression/decompression.
Content-Encoding
Content-Encoding spécifie quel encodage est utilisé par le serveur pour compresser le corps de sa réponse
Il est utile de préciser que le serveur choisi un des encodages listés dans l’en-tête Accept-Encoding de la
requête ⇒ un des encodages accepté par le navigateur client
Requête du client : Accept-Encoding: compress, gzip; q=0.9, identity; q=0.8
Identifiant Signification
compresse C’est le format de compression issu des systèmes Unix. Cet encodage est basé sur l’algorithme est Lempel-Zip-Welch.
deflate Ce format est basé sur l’algorithme Lempel-Zip et le codage de Huffman.
gzip Le format GNU zip est une évolution de deflate. gzip est basé sur le codage Lempel-Zip et un CRC de 32 bits.
identity Indique qu’aucune compression, ni modification n’a été apportée aux données.
br Le format Brotli est basé sur une variante moderne de Lempel-Zip et présente des performances intéressantes point de vue
temps de compression/decompression.
Content-Encoding
Content-Encoding spécifie quel encodage est utilisé par le serveur pour compresser le corps de sa réponse
Il est utile de préciser que le serveur choisi un des encodages listés dans l’en-tête Accept-Encoding de la
requête ⇒ un des encodages accepté par le navigateur client
Requête du client : Accept-Encoding: compress, gzip; q=0.9, identity; q=0.8
Réponse du serveur : Content-Encoding: gzip
Identifiant Signification
compresse C’est le format de compression issu des systèmes Unix. Cet encodage est basé sur l’algorithme est Lempel-Zip-Welch.
deflate Ce format est basé sur l’algorithme Lempel-Zip et le codage de Huffman.
gzip Le format GNU zip est une évolution de deflate. gzip est basé sur le codage Lempel-Zip et un CRC de 32 bits.
identity Indique qu’aucune compression, ni modification n’a été apportée aux données.
br Le format Brotli est basé sur une variante moderne de Lempel-Zip et présente des performances intéressantes point de vue
temps de compression/decompression.
Content-Language identifie le langage naturel des données envoyées dans le corps de la réponse
⇒ Content-Language: en-us
Content-Language identifie le langage naturel des données envoyées dans le corps de la réponse
⇒ Content-Language: en-us
Content-Length renseigne la taille du corps de la réponse en octets
⇒ Content-Length: 204
Content-Language identifie le langage naturel des données envoyées dans le corps de la réponse
⇒ Content-Language: en-us
Content-Length renseigne la taille du corps de la réponse en octets
⇒ Content-Length: 204
Content-Type identifie le type MIME du corps de la réponse c.-a.d. la ressource
⇒ Content-Type : text/plain
Content-Language identifie le langage naturel des données envoyées dans le corps de la réponse
⇒ Content-Language: en-us
Content-Length renseigne la taille du corps de la réponse en octets
⇒ Content-Length: 204
Content-Type identifie le type MIME du corps de la réponse c.-a.d. la ressource
⇒ Content-Type : text/plain
Date est obligatoire dans les réponses et facultatif dans les requêtes
⇒ Date indique la date (jours, mois, année, et heure) du début de transfert des données
⇒ date: Mon, 24 Feb 2020 [Link] GMT
Content-Language identifie le langage naturel des données envoyées dans le corps de la réponse
⇒ Content-Language: en-us
Content-Length renseigne la taille du corps de la réponse en octets
⇒ Content-Length: 204
Content-Type identifie le type MIME du corps de la réponse c.-a.d. la ressource
⇒ Content-Type : text/plain
Date est obligatoire dans les réponses et facultatif dans les requêtes
⇒ Date indique la date (jours, mois, année, et heure) du début de transfert des données
⇒ date: Mon, 24 Feb 2020 [Link] GMT
Server est l’équivalent de l’en-tête User-Agent via lequel le serveur peut indiquer ses caractéristiques
⇒ Souvent cet en-tête est volontairement mal renseigné et cela pour des raisons de sécurité
Set-Cookie
Set-Cookie permet de joindre des cookies à une réponses
Set-Cookie
Set-Cookie permet de joindre des cookies à une réponses
Il indique le nom du cookie, sa valeur, sa date d’expiration, le domaine d’où il est envoyé ainsi que d’autres
information
set-cookie: <cookie-name>=<cookie-value>
set-cookie: <cookie-name>=<cookie-value>; expires=<date>
set-sookie: <cookie-name>=<cookie-value>;domain=<domain-value>
Set-Cookie
Set-Cookie permet de joindre des cookies à une réponses
Il indique le nom du cookie, sa valeur, sa date d’expiration, le domaine d’où il est envoyé ainsi que d’autres
information
set-cookie: <cookie-name>=<cookie-value>
set-cookie: <cookie-name>=<cookie-value>; expires=<date>
set-sookie: <cookie-name>=<cookie-value>;domain=<domain-value>
Set-Cookie: id=a6fwa; Expires=Wed, 17 May 2017 [Link] GMT; Domain=[Link]
Plan
1 Présentation de HTTP
2 Requêtes HTTP
4 Réponses HTTP
6 Un peu de pratique
Un peu de pratique