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