HTTP
Document Sample


Le protocole HTTP
HTTP (Hyper Text Transfer Protocol) est un
protocole de transfert de données hypermédia sur
Internet.
Le World-Wide Web (WWW) fait référence à un
réseau de serveurs qui communiquent par HTTP.
HTTP utilise le modèle client-serveur sur TCP:
– Le serveur Web (Appache, Netscape, IIS, …)
– Le client est un naviagateur (IE, Netscape, …)
A. Obaid © - Développement d'applications (INF4482)
Modèle du web
Page courante Serveur: abc.zzz.uk
Serveur: www.xyx.com
Client affichée
xxxx Hyperlien xxxx
xxxx
xxxx Hyperlien xxxx
xxxx
HTTP sur TCP HTTP sur TCP
Internet
A. Obaid © - Développement d'applications (INF4482) HTTP 2
Avantages de HTTP
Permet la négociation des types de données.
Permet de servir des documents de plusieurs
types: texte (HTML,XML,…), image (JPEG,
GIF, …), combiné (multimédia),…
Extensible avec l'emploi d'en-têtes.
A. Obaid © - Développement d'applications (INF4482) HTTP 3
Avantages de HTTP
Sans état (stateless). Donc léger.
– Quelques fois c'est un inconvenient !
Ses requêtes et réponses sont en ASCII.
Sécuritaire avec SSL.
N'est (généralement) pas filtré par les fire-walls.
A. Obaid © - Développement d'applications (INF4482) HTTP 4
É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 )
A. Obaid © - Développement d'applications (INF4482)
Requêtes HTTP
Un requête consiste en:
– Une ligne de commande contenant le nom de la
commande (GET, POST, HEAD, …), l'URL demandé
et la version de HTTP utilisée.
Exemple: GET /doucment.html HTTP/1.1
– Des lignes d'en-têtes (optionnelles)
– Une ligne vide
– Le corps de la requête (optionnel)
A. Obaid © - Développement d'applications (INF4482)
Réponses HTTP
La réponse de HTTP consiste en:
– Une ligne de code de la réponse contentant la version
de HTTP utilisée, un code et une texte explicatif
Exemple: HTTP/1.0 200 OK
– Des lignes d'en-têtes
– Une ligne vide
– Le corps de la réponse: document de type texte
(HTML,XML,…), image (JPEG, GIF, …), combiné
(multimédia),…
A. Obaid © - Développement d'applications (INF4482)
Les URL
Un URL (Uniform Resource Locator) est un
Mécanisme d'identification des ressources sur le
Web:
service://NomDeDomaine:[port]/ressource
La ressource peut être:
– Un document (texte, image,…)
– Un exécutable (binaire, Perl, Python, …)
– Un objet (servlet, bean, ….)
Le service peut être HTTP, FTP, TELNET, SMTP, …
A. Obaid © - Développement d'applications (INF4482) HTTP 8
Méthodes d’une requête
POST
– Puisque les paramètres sont à l’intérieur du corps
de message, pour être enregistré comme favoris,
le fureteur doit enregistrer l’URI et le corps de
message
– Puisque souvent on demande le POST pour
produire des évènements irréversibles sur le
serveur, le fureteur doit demander à l’usager s’il
désire renvoyer la demande. Si l’utilisateur
répond ok, alors le fureteur renvoie la requête.
A. Obaid © - Développement d'applications (INF4482) HTTP 9
Méthodes d’une requête
OPTIONS
– Utilisé pour obtenir les options du serveur
HEAD
– Utilisé pour avoir une réponse avec toutes les
entêtes qui vont être générés par la requête GET.
– Peut-être utilisé pour s’assurer qu’un lien est
valide,…
A. Obaid © - Développement d'applications (INF4482) HTTP 10
Autres méthodes HTTP
PUT
– Pour enregistrer le corps du message comme un
URI
DELETE
– Pour supprimer une ressource identifiée par l’URI
TRACE
– Pour tester la communication entre le client et le
serveur.
– Le serveur renvoie la requête, exactement comme
il l’a reçu, dans le corps de la réponse.
A. Obaid © - Développement d'applications (INF4482) HTTP 11
Gestion de l’état
HTTP est un protocole sans état (stateless)
Problème lors d’utilisation d’applications WEB
qui nécessitent plusieurs requêtes pour
compléter une transaction.
A. Obaid © - Développement d'applications (INF4482) HTTP 12
Simulation des états
Lors d’une requête, le serveur renvoie avec
la réponse l’état de la transaction que le
client devra renvoyer lors de la prochaine
requête.
Le serveur utilise une façon d’enregistrer
l’état et d’utiliser un identifiant qu’il retourne
au client. Cet identifiant sera retourné par
le client lors de la prochaine requête.
A. Obaid © - Développement d'applications (INF4482) HTTP 13
Simulation des états
Utilisation d’un cookie.
Encapsuler un champ caché (Hidden) dans
un document HTML
Encoder l’URI dans le corps de la réponse,
typiquement un lien sur une autre page de
l’application:
– URL rewriting
A. Obaid © - Développement d'applications (INF4482) HTTP 14
Cookie
Paire de nom=valeur passé du serveur au
fureteur dans l’entête de la réponse
Lorsque le fureteur envoie une requête, il
inclut tous les cookies non expirés reçus du
même serveur à l’intérieur de la requête.
Problèemes :
– Certains fureteurs ne supportent pas les cookies
– Le client peut désactiver les cookies
A. Obaid © - Développement d'applications (INF4482) HTTP 15
Champs cachés
Le serveur envoie un champs caché avec un
contenu au fureteur contenant l’état de la
transaction.
Le fureteur utilise ce champ comme un
champ ordinaire et le renvoie avec la
prochaine requête lors de la soumission d’un
formulaire.
A. Obaid © - Développement d'applications (INF4482) HTTP 16
Session tracking
Envoyer toutes l’information sur l’état de la
session entre le client et le serveur n’est pas
efficace.
Les serveurs modernes utilisent le principe
de garder l’information sur le serveur, et de
passer au client seulement l’identifiant de
l’état.
A. Obaid © - Développement d'applications (INF4482) HTTP 17
Session tracking
Toutes les requêtes qui possèdent le même
identifiant de session (Session ID)
appartiennent à la même session.
Le serveur peut alors garder la trace de la
session
A. Obaid © - Développement d'applications (INF4482) HTTP 18
Les codes des réponses
Information :
– 100 Continue : Le serveur accepte de traiter la
requête et le client doit continuer.
– 101 Changement de protocole : Le serveur doit
continuer avec une autre version de HTTP.
Succès :
– 200 OK : La requête a bien été exécutée.
– 201 Créée : La ressource demandée a été créée.
– 202 Accepté : Traitement demandé en cours
d’exécution.
– ..
A. Obaid © - Développement d'applications (INF4482) HTTP 19
Les codes des réponses
Redirection :
– 300 Choix multiples : La ressource possède
plusieurs emplacements. Le client doit choisir.
– 301 Ressource déplacée : La ressource a changé
de place.
– 304 Non modifié : La ressource demandée n’a
pas été modifiée depuis la dernière requête.
A. Obaid © - Développement d'applications (INF4482) HTTP 20
Les codes des réponses
Mauvaise requête :
– 401 Accès non autorisé: Le client doit être authentifié.
– 403 Interdit: Le serveur refuse d’exécuter la requête.
– 404 Non trouvé: Ressource non trouvée..
– 405 Méthode non autorisée.
– 408 Timeout dans la requête : Le client doit répéter sa
requête.
– 410 Parti : La ressource demandée n’est plus
disponible.
A. Obaid © - Développement d'applications (INF4482) HTTP 21
Exemples de requêtes
GET http://www.info.uqam.ca/Programmation/tcpip.html HTTP/1.1
<Ligne Vide>
URL relatif GET Programmation/tcpip.html HTTP/1.1
<Ligne Vide>
GET Programmation/traitement?Par1&Par2 HTTP/1.1
<Ligne Vide>
POST Programmation/traitement HTTP/1.1
<Ligne Vide>
… Données …
A. Obaid © - Développement d'applications (INF4482) HTTP 22
Manipulation des cookies-
Exemple
GET cgi-bin/ProgrammeCookie HTTP/1.0
HTTP/1.1 200 OK
Date: Thu, 01 May 2003 00:07:30 GMT
Server: Apache/1.3.0 (Unix)
Set-Cookie: Nom=OBAID; path=/; expires=Thursday, 20-Nov-03 14:00:00 GMT
Connection: close
Content-Type: text/plain
….
GET /index.html HTTP/1.0
Cookie: Nom=OBAID
A. Obaid © - Développement d'applications (INF4482) HTTP 23
Codages des URLs
Les caractères spéciaux dans un URL
doivent être codés selon un codage (URL
Encoding) :
– Liste d’éléments: séparés par &.
– Espaces: remplacés par +.
– Tout autre symbole: remplacé par son code ASCII
en héxadécimal:
Exemple: Montréal/Jazz est codé Montr%E9al%2FJazz
A. Obaid © - Développement d'applications (INF4482) HTTP 24
Les en-têtes
Ils accompagnent les requêtes pour les réponses.
Enrichissent les échanges HTTP
Permettent de négocier certains paramètres de la
communication.
A. Obaid © - Développement d'applications (INF4482) HTTP 25
Les en-têtes de requête
HTTP-Version: Version de HTTP utilisée.
Accept: Le client indique les types de documents
qu’il accepte.
Accept-Charset: Le client précise les jeux de
caractères qu’il accepte (ISO-8859-1,…).
If-Modified-Since: Utilisé par le client pour obtenir un
document s’il a été récemment modifié. Utilisé par
l'opération Reload.
Connection: Permet de spécifier certains paramètres
de connexion (ex. Keep-Alive). Non disponible partout.
A. Obaid © - Développement d'applications (INF4482)
Les en-têtes de requête
Autorization : Le client soumet des paramètres pour
une autorisation d’accès.
Host : Adresse du serveur .
Cookie : Permet au client de présenter une cookie.
Referer : URL de la page origine de la requête.
User-Agent : Informations sur le navigateur.
A. Obaid © - Développement d'applications (INF4482) HTTP 27
Les en-têtes de réponse
Content-Encoding : Type de codage du contenu
(ie. compression).
Content-Length : La longueur en octets des
données de la réponse.
Content-Type : Type (MIME) du contenu de la
réponse.
Expires: Date de validité d’un document. Utilisé
pour la gestion des mémoires cache.
A. Obaid © - Développement d'applications (INF4482) HTTP 28
Les en-têtes de réponse
Location : Permet au serveur de demander au client
de rediriger sa requête ailleurs.
Server : Informations sur le logiciel serveur utilisé.
Set-Cookie : Permet au serveur de fournir une cookie
au client.
A. Obaid © - Développement d'applications (INF4482) HTTP 29
Exemples d'échanges HTTP
Page :
<a HREF="http://www.info.uqam.ca/Test/texte.html"> Obtenir le texte </a>
GET Test/texte.html HTTP/1.0
Accept: text/plain , image/*
If-Modified-Since: Wed, 10 Sep 2003 14:20:21 GMT
Referer: http://www.info.uqa.ca/index.html
User-Agent: Mozilla/2.0
Ligne vide Réponse
Requête HTTP/1.0 200 OK
Date: Wed, 10 Sep 2003 14:20:21 GMT
Server: NCSA/1.5.2
Mime-Vesion: 1.0
Content-Type: text/html
Last-Modified: Wed, 10 Sep 1998 14:20:23 GMT
Content-Length: 139
Ligne vide
<html> ……</html>
A. Obaid © - Développement d'applications (INF4482) HTTP 30
Exemples d'échanges HTTP
HEAD Test/texte.html HTTP/1.0
User-Agent: Mozilla/2.0
From: obaid.abdel@uqam.ca
Ligne blanche Réponse
Requête HTTP/1.0 200 OK
Date: Wed, 10 Sep 2003 14:20:21 GMT
Server: NCSA/1.5.2
Mime-Vesion: 1.0
Content-Type: text/html
Last-Modified: Wed, 10 Sep 1998 14:20:23 GMT
A. Obaid © - Développement d'applications (INF4482) HTTP 31
Requêtes avec paramètres
Méthode GET :
http://www.info.uqam.ca/cgi/recherche?item1+item2+item3
GET cgi/recherche?item1+item2+item3 HTTP/1.0
Accept: */*
Accept-language: en, fc
User-Agent: Mozilla/2.0
Host: saturne.info.uqam.ca
Ligne blanche
Méthode GET à partir d'un formulaire :
http://www.info.uqam.ca/cgi/saisie?champ1=Val1&champ2=Val2
GET /cgi/saisie?champ1=Val1&champ2=Val2
Accept: */*
Accept-language: en, fc
User-Agent: Mozilla/2.0
Host: saturne.info.uqam.ca
Ligne blanche
A. Obaid © - Développement d'applications (INF4482) HTTP 32
Requêtes avec paramètres
Méthode POST à partir d'un formulaire avec:
• http://www.info.uqam.ca/cgi/saisie
• champ1=Abdel Obaid et champ2=514-9873000
POST /cgi/saisie
Accept: */*
User-Agent: Mozilla/2.0
Host: saturne.info.uqam.ca
Content-type: multipart/form-data; boundary=-----------------404040878888
Content-Length: 112
Ligne vide
-----------------404040878888
Content-Disposition: form-data; name="Champ1"
Ligne vide
Abdel+Obaid
-----------------404040878888
Content-Disposition: form-data; name="Champ2"
Ligne vide
514-9873000
-----------------404040878888
A. Obaid © - Développement d'applications (INF4482) HTTP 33
Utilisation des formulaires
Les formulaires sont définis avec la balise:
<FORM NAME="nom" ACTION="URL" METHOD="Méthode">
....
</FORM>
URL désigne le programme qui va traiter les données
du formulaire. Méthode est GET (défault) ou POST.
Les données du formulaire sont traitées par une
ressource externe au serveur (ex. CGI, Servlet)
A. Obaid © - Développement d'applications (INF4482) HTTP 34
Méthodes GET vs POST
GET
– Demande une ressource en passant les
paramètres dans l’URI
– Utilisée pour retrouver une ressource ou quand
peu de données sont a soumettre au serveur
POST
– Demande une ressource en passant les
paramètres à l’intérieur du corps de message
– Souvent utilisé lorsqu'on soumet beaucoup de
données au serveur
Exemple: Contenu d'un gros formulaire
A. Obaid © - Développement d'applications (INF4482) HTTP 35
Méthodes GET vs POST
GET :
– Le fureteur peut ajouter l’URI dans ses favoris, encodé dans
un hyperlien et la réponse peut être mise en cache.
– On peut facilement demander un rafraîchissement de la
page ou revenir par le bouton « back »
POST
– Puisque les paramètres sont dans le corps de
message, le fureteur doit enregistrer l’URI et le
corps de message
– Puisque souvent on demande le POST pour
produire des évènements irréversibles sur le
serveur, le fureteur doit demander à l’usager s’il
désire renvoyer la demande. Si l’utilisateur
répond ok, alors le fureteur renvoie la requête
A. Obaid © - Développement d'applications (INF4482) HTTP 36
Modèle avec CGI
QUERY_STRING
Variables
Navigateur HTTPD CONTENT_TYPE
REMOTE_ADDR d ’environnment
...
CGI Programme/
Script
stdin/stdout
A. Obaid © - Développement d'applications (INF4482) HTTP 37
Les CGI
Communication par variables
d'environnement
Simples à mettre en œuvre
Usage de plusieurs langages:
– Binaires, Shell, Perl, Python, PHP...
A. Obaid © - Développement d'applications (INF4482) HTTP 38
Variables de CGI
AUTH_TYPE SCRIPT_NAME
CONTENT_LENGTH SERVER_NAME
CONTENT_TYPE SERVER_PORT
DOCUMENT_ROOT SERVER_PROTOCOL
PATH_INFO SERVER_SOFTWARE
PATH_TRANSLATED …
QUERY_STRING
REMOTE_ADDR
REMOTE_HOST
REMOTE_USER
REQUEST_METHOD
A. Obaid © - Développement d'applications (INF4482) HTTP 39
Fonctionnement du CGI
Browser Serveur
Submit Post
Write environnement
Execute
Programme
Read environnement
Standart Input
Standart output
Page HTML
A. Obaid © - Développement d'applications (INF4482) HTTP 40
Problèmes avec les CGI
Pour chacune des requêtes reçues le serveur
WEB doit :
– Créer un nouveau processus
– Charger et interpréter un script
– Exécuter le script
– Fermer le processus et fermer le tout.
Devient un problème quand le trafic est
important
A. Obaid © - Développement d'applications (INF4482) HTTP 41
Alternatives aux CGI
FastCGI, mod_perl de Apache
NSAPI de Netscape
ISAPI de Microsoft
Java Servlet de Sun Microsystème
Ces solutions offrent une meilleure performance
mais un problème persiste :
– Le HTML est crée dans le programme (traitement)
A. Obaid © - Développement d'applications (INF4482) HTTP 42
Get documents about "