Notions sur le protocole HTTP
P. Renevier remasterisé S. Verel
Modèles de programmation via le service Web
Service HTTP : Modèle de document dynamique avec CGI
Requête CGI
Navigateur Un
Protocole HTTP HTTPD CGI
HTML prog.
Document généré 80
Machine serveur
TCP/IP
Le serveur HTTP dispose une interface, dit CGI (Commun Gateway Interface),
permettant d’invoquer l’exécution d’un programme quelconque se trouvant sur la
même machine serveur selon un ordre venant du client web :
● l’ordre d’exécution sera sous forme d’un hyperlien avec quelques conventions
spécifique
● Le serveur HTTP reçoit cet ordre, il organisera ensuite l’exécution du programme
demandé. La communication entre le programme et le serveur HTTPD est assurée par :
les entrées/sorties standard (STDIN et STDOUT) et un ensemble de variables
d’environnement du serveur HTTPD
● Le résultat de l’exécution sera envoyé par le serveur HTTP au client web
2
Modèles de programmation via le service Web
NOTION d’URL (Uniform Resource Locator) :
Un URL représente une identification d’un endroit où stocke une ressource sur le
réseau Internet
Une ressource peut-être stockée à plusieurs endroits, elle possède dont un ou
plusieurs URL
Format d’un URL : (note : le symbole [xxx] signifie que xxx est facultatif)
Protocole:// Hôte [:Port] Chemin Nom [#Ancre] [?Paramètres]
Exemple 1 : une ressource statique est un fichier html
http:// [Link] /~verel/ [Link]
Exemple 2 : une ressource dynamique générée par un programme cgi :
http:// [Link] /cgi-bin/Vitesse2/ [Link] ?Keywords=unsa&SearchEngine=Goo
gle&Kind=Search&InfoSpace=&MaxInf
oNumber=100&VitesseMode=Win
3
Codage d’une URL
Tabulation %09 < %3C
Espace %20 = %3D
" %22 > %3E
# %23 ? %3F
% %25 @ %40
& %26 [ %5B
( %28 \ %5C
) %29 ] %5D
+ %2B ^ %5E
, %2C ' %60
. %2E { %7B
/ %2F | %7C
: %3A } %7D
; %3B ~ %7E
4
Modèles de programmation via le service Web
NOTION d’URI (Uniform Resource Identificator) :
Un URI représente une identification de l’origine d’une ressource sur le réseau
Internet
Une ressource peut-être stockée à plusieurs endroits, mais ces copies ont la
même origine. Une ressource a donc un et un seul URI
Format d’un URI : <type document | Propriétés | Origine>
Exemple : La version 4.01 de HTML impose la spécification de l’URI de
définition de ce langage (un DTD) dans la première ligne du document :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"[Link]
5
Modèles de programmation via le service Web
Le passage de paramètres à un programme CGI :
Format de paramètre : en texte ASCII
chaque paramètre comprend 2 opérandes «Nom-de-variable » et «Valeur-de-
variable » reliées par le symbole ‘=‘
les paramètres sont reliés par le symbole ‘&’
Convention : certaines règles de transformation automatique sont appliquées : le
caractère d’espace (‘ ‘) est remplacé par ‘+’, …
var1 = val1 & var2 = val2 & … & varn = valn
Modes de passage de paramètres :
GET : la chaîne de paramètres est envoyée avec l’URL après le caractère ‘?’ et sera
déposée dans une variable d’environnement, appelé QUERY_STRING du service
HTTP (sur la machine serveur). Avantage : simple; Inconvénient : taille limitée à
200 caractères
POST : la chaîne de paramètre sera envoyée indépendamment de l’URL et dirigée
vers le fichier STDIN (Standard INPUT) du programme CGI. Avantage : taille
illimitée, traitement standard
6
Modèles de programmation via le service Web
Le retour de données depuis d’un programme CGI au serveur HTTP :
Format de données de retour : Texte HTML
Mode de passage du CGI vers le serveur HTTP : les données sorties du
STDOUT (Standard OUTPUT) du programme CGI seront redirigées à l’entrée
standard ( stdin) du service HTTP qui les transmet au Client Web
Ce résultat peut être n’importe quel document multimédia, depuis le simple
texte ascii jusqu’à la vidéo. Dans le cas où la requête d’un client se limite à
demander au serveur de lui fournir un fichier, le serveur se base sur l’extension
de ce fichier pour déterminer son type
Conformément au protocole HTTP, il faut alors transmettre ce type dans l’en-
tête, avec la clause ‘Content-type: typeDocument’, pour que le navigateur sache
comment décrypter les informations qui lui proviennent par la suite
Exemple : Pour un fichier HTML par exemple, l’extension est le plus souvent
.html, et la valeur de typeDocument est ‘text/html’
7
Modèles de programmation via le service Web
M odèle de pr ogr ammat ion Client /Ser veur sur I nt er net :
une applicat ion CL /SV sur le r éseau I nt er net est const it ué de 2 par t ies :
Un programme Client de l’application et
Un programme Serveur de l’application
Programme Programme
Protocole de l’app.
Client de l’app. Serveur de l’app.
TCP/IP
Programme Client Programme Serveur
• Interface d’utilisateur • Réalisation de services
• Non permanent • Processus permanent
• Orienté graphique • Orienté traitement
• Langage intermédiaire • Ports TCP exclusifs
8
Modèles de programmation via le service Web
Modèle de programmation web à 2-tiers :
Tiers Client : Programme interface comprenant des outils de présentation et de
programmation : HTML, Plug-in, JavaScript, Style, Applet Java
Tiers Serveur : Programme de services, appelé « objets de métiers », développé
depuis un environnement de développement normalisé, dit pré processeur de
HTTP, Par exemple : PHP, JSP, ASP
Partie client Partie serveur
Protocole App.
de l’application de l’application
Navigateur
Outils Pré
HTML HTTP HTTPD processeur
Prog.
TCP/IP 80 TCP/IP
9
Modèles de programmation via le service Web
Les limites de la première approche
Côté Client : absence des outils de programmation et les outils de présentation
sont limités à la capacité du langage HTML
Côté Serveur : absence des outils de développement adaptés, la communication
avec le serveur HTTP est à automatiser
Côté Protocole : les paramètres sont passés en mode texte avec un format
imposé (absence de sécurité et capacité limitée) et deux modes de
récupération fixes (GET et POST)
Renforcer les Normaliser les
Automatiser
outils de outils de
le processus de
programmation développement
communication
et de présentation du côté
Client/Serveur
du côté CLIENT SERVEUR
10
Modèles de programmation via le service Web
Modèle de programmation web à 2-tiers :
Outils de présentation pour CLIENT :
HTML/XML : Langage cadre permet d’une présentation de base et une intégration
des différents modes de programmations et de présentation multimédia
CSS2 : Langage de définition de style de présentation pour les balises HTML. Il
permet d’une présentation plus fine et paramétrable
Plug-in : Des programme d’interprète des types de données multimédia permettant
au navigateur d’afficher ces données (word, excel, …)
Outils de programmation pour CLIENT :
JavaScript : Langage de programmation intégré dans le HTML, permettant de
manipuler les objets documentaires de HTML, de créer et capturer et manipuler des
évènements sur interface et d’effectuer des calculs
Applets Java, Flash, etc.
11
Modèles de programmation via le service Web
Modèle de programmation web à 3-tiers :
1er-Tiers de « Client » : 2e-Tiers d’ «Objets de 3e-Tiers de «Bases de
Programmation interface métier » : Programmation de données » :
d’utilisateur services liés à l’application Programmation des
réelle sources de données pour
l’application
Partie client Partie serveur Partie SGBD
Protocole App. SQL
de l’application de l’application de l’application
Navigateur Médiateur
Outils Pré
HTML HTTPD de base de SGBD
Prog. HTTP processeur
données
TCP/IP 80 TCP/IP TCP/IP TCP/IP
12
Protocole HTTP
HTTP (HyperText Transfer Protocol) : protocole le plus utilisé sur
Internet depuis 1990.
La version 0.9 était uniquement destinée à transférer des données sur
Internet (en particulier des pages Web écrites en HTML).
La version 1.0 du protocole (la plus utilisée) permet désormais de
transférer des messages avec des en-têtes décrivant le contenu du message
en utilisant un codage de type MINE.
Transfert de fichiers localisés grâce à une URL entre un navigateur (le
client) et un serveur Web (httpd).
Le navigateur effectue une requête HTTP
Le serveur traite la requête puis envoie une réponse HTTP
RFC 1945 - Hypertext Transfer Protocol -- HTTP/1.0
RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1
13
Requête HTTP
Requête envoyée au serveur par le navigateur
Composée des éléments suivants :
Une ligne de requête (3 éléments séparés par un espace)
La méthode
L'URL
La version du protocole utilisé par le client (généralement HTTP/1.0)
Les champs d'en-tête de la requête: ensemble de lignes facultatives
donnant des informations supplémentaires sur la requête et/ou le client
(navigateur, OS)
Ces lignes sont composées d'un nom (type d'en-tête) suivi de deux points (:) et
de la valeur
Le corps de la requête: ensemble de lignes optionnelles séparées des
lignes précédentes par une ligne vide
Permet (par exemple) un envoi de données par une commande POST lors de
l'envoi de données au serveur par un formulaire
14
Requête HTTP
Syntaxe (<crlf> = saut de ligne):
METHODE URL VERSION<crlf>
EN-TETE : Valeur<crlf>
...
EN-TETE : Valeur<crlf>
Ligne vide<crlf>
CORPS DE LA REQUETE
Exemple de requête HTTP:
GET [Link] HTTP/1.0
Accept : text/html
If-Modified-Since : Saturday, 15-January-2000 [Link] GMT
User-Agent : Mozilla/4.0 (compatible; MSIE 5.0; Windows 95)
15
Commande d’une requête http
Commande Description
GET Requête de la ressource située à l'URL spécifiée
Requête de l'en-tête de la ressource située à l'URL
HEAD
spécifiée
Envoi de données au programme situé à l'URL
POST
spécifiée
PUT Envoi de données à l'URL spécifiée
DELETE Suppression de la ressource située à l'URL spécifiée
16
Entêtes d’une requête http
Nom de l'en-tête Description
Type de contenu accepté par le navigateur (par
Accept
exemple text/html).
Accept-Charset Jeu de caractères attendu par le navigateur
Accept-Encoding Codage de données accepté par le navigateur
Langage attendu par le navigateur (anglais par
Accept-Language
défaut)
Authorization Identification du navigateur auprès du serveur
Content-
Type de codage du corps de la requête
Encoding
Content-
Type de langage du corps de la requête
Language
17
Entêtes d’une requête http
Nom de l'en-tête Description
Content-Length Longueur du corps de la requête
Type de contenu du corps de la requête (par exemple
Content-Type
text/html).
Date Date de début de transfert des données
Utilisé par les machines intermédiaires entre le browser et
Forwarded
le serveur
From Permet de spécifier l'adresse e-mail du client
Permet de spécifier que le document doit être envoyé s'il a
If-Modified-Since
été modifié depuis une certaine date
Link Relation entre deux URL
Orig-URL URL d'origine de la requête
Referer URL du lien à partir duquel la requête a été effectuée
Chaîne donnant des informations sur le client, comme le
User-Agent nom et la version du navigateur, du système
18
d'exploitation
Réponse HTTP
Une ligne de statut:
La version du protocole utilisé
Le code de statut
La signification du code
Les champs d'en-tête de la réponse: ensemble de lignes facultatives
donnant des informations supplémentaires sur la réponse et/ou le serveur.
Ces lignes sont composées d'un type d'en-tête suivi de deux points (:) et de la
valeur de l'en-tête
Le corps de la réponse: contient le document demandé
19
Réponse HTTP
Syntaxe
VERSION-HTTP CODE EXPLICATION<crlf>
EN-TETE : Valeur<crlf>
...
EN-TETE : Valeur<crlf>
Ligne vide<crlf>
CORPS DE LA REPONSE
Exemple de réponse HTTP:
HTTP/1.0 200 OK
Date : Sat, 15 Jan 2000 [Link] GMT
Server : Microsoft-IIS/2.0
Content-Type : text/HTML
Content-Length : 1245
Last-Modified : Fri, 14 Jan 2000 [Link] GMT
20
Entêtes des réponses HTTP
Nom de l'en-tête Description
Content-Encoding Type de codage du corps de la réponse
Content-Language Type de langage du corps de la réponse
Content-Length Longueur du corps de la réponse
Type de contenu du corps de la réponse (par exemple
Content-Type
text/html).
Date Date de début de transfert des données
Expires Date limite de consommation des données
Utilisé par les machines intermédiaires entre le browser
Forwarded
et le serveur
Redirection vers une nouvelle URL associée au
Location
document
Server Caractéristiques du serveur ayant envoyé la réponse
21
Code réponse HTTP
Code Message Description
10x Message d'information Ces codes ne sont pas utilisés dans la version 1.0 du protocole
20x Réussite Ces codes indiquent le bon déroulement de la transaction
200 OK La requête a été accomplie correctement
Elle suit une commande POST, elle indique la réussite, le corps
201 CREATED du reste du document est sensé indiquer l’URL à laquelle
le document nouvellement créé devrait se trouver.
La requête a été acceptée, mais la procédure qui suit n'a pas
202 ACCEPTED
été accomplie
PARTIAL Lorsque ce code est reçu en réponse à une commande GET,
203
INFORMATION cela indique que la réponse n'est pas complète.
Le serveur a reçu la requête mais il n'y a pas d'information à
204 NO RESPONSE
renvoyer
Le serveur indique au navigateur de supprimer le contenu des
205 RESET CONTENT
champs d'un formulaire
Il s'agit d'une réponse à une requête comportant l'en-tête
206 PARTIAL CONTENT
range. Le serveur doit indiquer l'en-tête content-Range
22
Code réponse HTTP
Code Message Description
Ces codes indiquent que la ressource n'est plus à
30x Redirection
l'emplacement indiqué
Les données demandées ont été transférées à une
301 MOVED
nouvelle adresse
Les données demandées sont à une nouvelle URL,
302 FOUND mais ont cependant peut-être été déplacées
depuis...
Cela implique que le client doit essayer une nouvelle
303 METHOD adresse, en essayant de préférence une autre
méthode que GET
Si le client a effectué une commande GET
NOT conditionnelle (en demandant si le document a été
304
MODIFIED modifié depuis la dernière fois) et que le
document n'a pas été modifié il renvoie ce code.
23
Code réponse HTTP
Code Message Description
40x Erreur due au client Ces codes indiquent que la requête est incorrecte
La syntaxe de la requête est mal formulée ou est
400 BAD REQUEST
impossible à satisfaire
Le paramètre du message donne les spécifications des
formes d'autorisation acceptables. Le client doit
401 UNAUTHORIZED
reformuler sa requête avec les bonnes données
d'autorisation
Le client doit reformuler sa demande avec les bonnes
402 PAYMENT REQUIRED
données de paiement
403 FORBIDDEN L'accès à la ressource est tout simplement interdit
Classique! Le serveur n'a rien trouvé à l'adresse
404 NOT FOUND
spécifiée.
24
Code réponse HTTP
Code Message Description
Ces codes indiquent qu'il y a eu une erreur interne du
50x Erreur due au serveur
serveur
Le serveur a rencontré une condition inattendue qui l'a
500 INTERNAL ERROR empêché de donner suite à la demande (comme quoi il
leur en arrive des trucs aux serveurs...)
Le serveur ne supporte pas le service demandé (on ne peut
501 NOT IMPLEMENTED
pas tout savoir faire...)
Le serveur a reçu une réponse invalide de la part du serveur
502 BAD GATEWAY auquel il essayait d'accéder en agissant comme une
passerelle ou un proxy
Le serveur ne peut pas vous répondre à l'instant présent, car
le trafic est trop dense (toutes les lignes de votre
503 SERVICE UNAVAILABLE
correspondant sont occupées veuillez rappeler
ultérieurement)
La réponse du serveur a été trop longue vis-à-vis du temps
504 GATEWAY TIMEOUT pendant lequel la passerelle était préparée à l'attendre (le
temps qui vous était imparti est maintenant écoulé...)
25