Développement d`applications

Transcription

Développement d`applications
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, …)
Développement d'applications
Modèle du web
Client
xxxx
xxxx
Page courante
affichée
Hyperlien
HTTP sur TCP
Serveur: abc.zzz.uk
Serveur: www.xyx.com
xxxx
xxxx
Hyperlien
xxxx
xxxx
HTTP sur TCP
Internet
Développement d'applications
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.
Développement d'applications
HTTP 3
Avantages de HTTP
Sans état (stateless). Donc léger.
– Quelques fois c'est un inconvénient !
Ses requêtes et réponses sont en ASCII.
Sécuritaire avec SSL.
N'est (généralement) pas filtré par les fire-walls.
Développement d'applications
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 )
Développement d'applications
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 /document.html HTTP/1.1
– Des lignes d'en-têtes (optionnelles)
– Une ligne vide
– Le corps de la requête (optionnel)
Développement d'applications
Réponses HTTP
La réponse de HTTP consiste en:
– Une ligne de code de la réponse contenant la version
de HTTP utilisée, un code et un 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),…
Développement d'applications
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, …
Développement d'applications
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.
Développement d'applications
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,…
Développement d'applications
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.
Développement d'applications
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.
Développement d'applications
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.
Développement d'applications
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
Développement d'applications
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èmes :
– Certains fureteurs ne supportent pas les cookies
– Le client peut désactiver les cookies
Développement d'applications
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.
Développement d'applications
HTTP 16
Session tracking
Envoyer toute 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.
Développement d'applications
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
Développement d'applications
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.
– ..
Développement d'applications
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.
Développement d'applications
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.
Développement d'applications
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 …
Développement d'applications
HTTP 22
Manipulation des cookiesExemple
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
Développement d'applications
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
Développement d'applications
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.
Développement d'applications
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.
Développement d'applications
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.
Développement d'applications
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.
Développement d'applications
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.
Développement d'applications
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
Requête
Développement d'applications
Réponse
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>
HTTP 30
Exemples d'échanges HTTP
HEAD Test/texte.html HTTP/1.0
User-Agent: Mozilla/2.0
From: [email protected]
Ligne blanche
Requête
Développement d'applications
Réponse
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
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
Développement d'applications
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
Développement d'applications
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)
Développement d'applications
HTTP 34
Méthodes GET vs POST
GET
– Demande une ressource en passant les
paramètres dans l’URI
– Utilisé 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
Développement d'applications
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
Développement d'applications
HTTP 36
Modèle avec CGI
Navigateur
HTTPD
QUERY_STRING
CONTENT_TYPE
REMOTE_ADDR
...
Variables
d ’environnment
Programme/
Script
CGI
stdin/stdout
Développement d'applications
HTTP 37
Les CGI
Communication par variables
d'environnement
Simples à mettre en œuvre
Usage de plusieurs langages:
– Binaires, Shell, Perl, Python, PHP...
Développement d'applications
HTTP 38
Variables de CGI
AUTH_TYPE
CONTENT_LENGTH
CONTENT_TYPE
DOCUMENT_ROOT
PATH_INFO
PATH_TRANSLATED
QUERY_STRING
REMOTE_ADDR
REMOTE_HOST
REMOTE_USER
REQUEST_METHOD
Développement d'applications
SCRIPT_NAME
SERVER_NAME
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE
…
HTTP 39
Fonctionnement du CGI
Serveur
Browser
Submit
Post
Write environnement
Execute
Programme
Read environnement
Standart Input
Standart output
Page HTML
Développement d'applications
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
Développement d'applications
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)
Développement d'applications
HTTP 42