Développement Web. Communication Client-Serveur LI328 UPMC. Sylvain Lamprier

Documents pareils
INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

NFA016 : Introduction. Pour naviguer sur le Web, il faut : Naviguer: dialoguer avec un serveur web

Technologies Web. Ludovic Denoyer Sylvain Lamprier Mohamed Amine Baazizi Gabriella Contardo Narcisse Nya. Université Pierre et Marie Curie

TP JAVASCRIPT OMI4 TP5 SRC

L3 informatique TP n o 2 : Les applications réseau

Les sites Internet dynamiques. contact : Patrick VINCENT pvincent@erasme.org

WEB & DÉVELOPPEMENT LES BASES DU WEB LE LANGAGE HTML FEUILLES DE STYLES CSS HISTORIQUE D INTERNET ET DU WEB LES DIFFÉRENTS LANGAGES

Développement des Systèmes d Information

Module BD et sites WEB

Programmation Web. Madalina Croitoru IUT Montpellier

SYSTÈMES D INFORMATIONS

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

DOM - Document Object Model

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

Application Web et J2EE

Sécurité des sites Web Pas un cours un recueil du net. INF340 Jean-François Berdjugin

Principales failles de sécurité des applications Web Principes, parades et bonnes pratiques de développement

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Failles XSS : Principes, Catégories Démonstrations, Contre mesures

HTTP 1.1. HyperText Transfer Protocol TCP IP ...

Les services usuels de l Internet

Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6

L envoi d un formulaire par courriel. Configuration requise Mail Texte Mail HTML Check-list

Optimiser pour les appareils mobiles

Architecture Orientée Service, JSON et API REST

Serveurs de noms Protocoles HTTP et FTP

Internet. DNS World Wide Web. Divers. Mécanismes de base Exécution d'applications sur le web. Proxy, fire-wall

INFORMATIQUE & WEB. PARCOURS CERTIFICAT PROFESSIONNEL Programmation de sites Web. 1 an 7 MODULES. Code du diplôme : CP09

Formation Website Watcher

(structure des entêtes)

Devenez un véritable développeur web en 3 mois!

TIC. Réseau informatique. Historique - 1. Historique - 2. TC - IUT Montpellier Internet et le Web

CRÉER, ROUTER ET GÉRER UNE NEWSLETTER, UN ING

Optimiser les performances d un site web. Nicolas Chevallier Camille Roux

Cours CCNA 1. Exercices

Compte Rendu d intégration d application

Guide d implémentation. Réussir l intégration de Systempay

Diffuser un contenu sur Internet : notions de base... 13

< Atelier 1 /> Démarrer une application web

SYSTEME DE GESTION DES ENERGIES EWTS EMBEDDED WIRELESS TELEMETRY SYSTEM

Technologies du Web. Créer et héberger un site Web. Pierre Senellart. Page 1 / 26 Licence de droits d usage

Applications et Services WEB: Architecture REST

Cisco Certified Network Associate

Les solutions de paiement CyberMUT (Crédit Mutuel) et CIC. Qui contacter pour commencer la mise en place d une configuration de test?

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères

4. SERVICES WEB REST 46

Web Tier : déploiement de servlets

Installation / Sauvegarde Restauration / Mise à jour

Dans nos locaux au 98 Route de Sauve NÎMES. Un ordinateur PC par stagiaire, scanner, imprimante/copieur laser couleur

Création, analyse de questionnaires et d'entretiens pour Windows 2008, 7, 8 et MacOs 10

Mise en œuvre des serveurs d application

Les grandes facettes du développement Web Nicolas Thouvenin - Stéphane Gully

Architectures web/bases de données

CREATION d UN SITE WEB (INTRODUCTION)

Notes pour l utilisation d Expression Web

Ajax, RIA et HTML Prise en charge d Ajax

HTTP HTTP. IUT1 dpt SRC L Isle d Abeau Jean-françois Berdjugin. Introduction et architecture Messages Authentification Conclusion

Mac OS X Server Administration des technologies Web. Pour la version 10.3 ou ultérieure

Formation Webmaster : Création de site Web Initiation + Approfondissement

Architecture N-Tier. Ces données peuvent être saisies interactivement via l interface ou lues depuis un disque. Application

Formation : WEbMaster

Créer un site Web : mode d emploi Sous SPIP, avec le squelette «établissement» de l académie de Versailles

Activité sur Meteor. Annexe 1 : notion de client-serveur et notion de base de données

Réseaux. 1 Généralités. E. Jeandel

INTRODUCTION AU CMS MODX

Manuel d'installation

Développer des Applications Internet Riches (RIA) avec les API d ArcGIS Server. Sébastien Boutard Thomas David

Petite définition : Présentation :

Programmation Internet Cours 4

Le serveur web Windows Home Server 2011

Hébergement WeboCube. Un système performant et sécurisé. Hébergement géré par une équipe de techniciens

Le serveur HTTPd WASD. Jean-François Piéronne

Stockage du fichier dans une table mysql:

Configurer le Serveur avec une adresse IP Statique (INTERFACE :FastEthernet) : et un masque

Module http MMS AllMySMS.com Manuel d intégration

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

Accès distant Freebox v6 Configuration

Approche Contract First

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

Attaques de type. Brandon Petty

MAILING KOMPOZER... 2 CREEZ UNE PAGE... 2 FORMAT DE LA PAGE... 2 AJOUTER DU TEXTE SUR UNE PAGE... 4

Dans l'article précédent, vous avez appris

S7 Le top 10 des raisons d utiliser PHP pour moderniser votre existant IBM i

Architectures Web Services RESTful

Caruso33 : une association à votre service

Programmation Web. Introduction

Gilles.Roussel univ-mlv.fr HTTP/1.1 RFC 2068

Hébergement de sites Web

Les outils de création de sites web

COURS 5 Mettre son site en ligne! Exporter son site avec WordPress Duplicator Installer un logiciel FTP Faire le suivi des visites de son site avec

OUAPI Guide d installation Outil d administration de parc informatique. Documentation d installation et de paramétrage

AJAX. (Administrateur) (Dernière édition) Programme de formation. France, Belgique, Suisse, Roumanie - Canada

MANUEL D INSTALLATION de GEONETWORK sur un serveur LINUX CentOS 4

Joomla! Création et administration d'un site web - Version numérique

Sessions en ligne - QuestionPoint

26 Centre de Sécurité et de

FORMATION / CREATION DE SITE WEB / 4 JOURNEES Sessions Octobre 2006

FileMaker Server 14. Guide de démarrage

Transcription:

1 / 57 Développement Web Communication Client-Serveur LI328 Sylvain Lamprier UPMC

Communication Client-Serveur 2 / 57 Navigateur Serveur Base de données HTML AJAX (Tomcat) MySQL CSS Javascript JSON Base de données NoSQL Moteur d'indexation Map - Reduce URL Page d'accueil? Affichage Page Principale HTML Affichage Commentaires Objet JSON Select Commentaires Resultats Select Stats Affichage Statistiques Clic Lien Login Objet JSON Page Login? Resultats Get Nouvelles infos Affichage Page Login HTML Login + MDP Infos valides? Select Enregistrement Index Indexation / Calculs Stats Utilisateur Affichage Page Principale HTML Resultats Select Stats Utilisateur Affichage Statistiques Objet JSON Resultats Nouveau Commentaire Nouveau Commentaire Insert Commentaire Affichage Nouveau Commentaire Objet JSON Insertion Ok Recherche par Mots-Clé Commentaires Pertinents? Select Commentaires Pertinents Affichage Resultats Recherche Objet JSON Resultats

Chargement de page Web 3 / 57 Qu'est-ce que Linux? get linux.html host... <html> Le symbole de Linux est <img src=«photo.png»> </html> Le symbole de Linux est 200 en têtes get photo.png host... 200 en têtes <html>. Le symbole de Linux est <img src=«photo.png» </html> <html>.le symbole de Linux est <img src=«photo.png»> linux.html </html> photo.png écran du navigateur internet disque dur du serveur

Communication Client-Serveur 4 / 57 Protocole HTTP Permet de demander et télécharger des pages Web stockées sur un serveur distant Contenu HTML Feuilles de style CSS Fonctions Javascript Contenu multimedia Navigateur client Interprète le contenu HTML/CSS et construit l arbre DOM du document correspondant Traite les scripts Web appelés en réaction à divers évènements Charge et affiche les contenus mulimedia (images, videos, etc...)

Communication Client-Serveur 5 / 57 Comment faire transiter des informations entre deux pages Web? Contenu de variables Javascript, Données de formulaire, etc... Comment faire pour transmettre et récupérer des informations stockées sur le serveur? Enregistrement d informations saisies par l utilisateur, Récupération de données dans base de données, etc... Comment demander au serveur l exécution de traitements "lourds"? Indexation des commentaires postés, Calculs statistiques, etc...

Comment faire transiter des informations entre deux pages HTML? 6 / 57 Exemple de Scénario 1 L utilisateur saisit différentes préférences d affichage sur une page "preferences.hml" 2 Il clique sur valider qui le redirige (par window.location.href) vers la page principale du site "main.html" 3 La page principale se charge et l on souhaite que les préférences saisies soient prises en compte pour l affichage de son contenu Problème : HTML n est pas prévu pour interpréter directement des informations qu on lui envoie Deux pages HTML sont totalement indépendantes Le navigateur se contente de charger la nouvelle page demandée (les informations de la page de départ ne sont plus accessibles)

Comment faire transiter des informations entre deux pages HTML? 7 / 57 Javascript nous permet d entrevoir 2 premières solutions Utiliser l URL 1 Passer des informations dans l URL après "?" (exemple : main.html?nom=joe&couleur_fond=blue) 2 Récupérer cette chaîne dans la nouvelle page avec Javascript par window.location.search (retourne "?nom=joe&couleur_fond=blue") 3 Parser la chaîne obtenue pour reconstruire les variables Peu sécurisé (à éviter absolument lors de transfert d infos de connexion) Difficile de transmettre autre chose que des infos très simples URL à rallonge

Comment faire transiter des informations entre deux pages HTML? 8 / 57 Javascript nous permet d entrevoir 2 premières solutions Utiliser des Cookies Petits fichiers textes stockés sur le disque du client, permettant de stocker des paires clés/valeur Lisibles uniquement à partir du site qui les a créés Création et lecture aussi bien à partir du client que du serveur (mais cookies indépendants) 1 Avant de quitter "preferences.html" : Enregistrement des informations saisies sur le poste client 2 A l arrivée sur la page "main.html" : Récupération des informations stockées dans les cookies définis pour le site Certains utilisateurs interdisent la création de cookies Certains navigateurs ne gèrent pas bien les cookies Limitation en nombre : Leur nombre total est limité à 300 Il ne peut exister au maximum que 20 cookies par domaine Limitation en taille : max/cookie=4ko

Comment faire transiter des informations entre deux pages HTML? 9 / 57 Javascript nous permet d entrevoir 2 premières solutions... Mais aucune des deux n est vraiment satisfaisante Ce doit être au serveur d insérer les informations nécessaires dans la nouvelle page Plusieurs possibilités mais plutôt que de simplement renvoyer une page HTML, le serveur doit effectuer un traitement Revient au problème de transfert/récupération d infos sur le serveur Nécessite de disposer d un serveur Web capable de manipuler des données et de les insérer dans des pages HTML cibles Interpréteur de scripts serveur comme PHP ou ASP Moteur de servlets JAVA

Communication Client-Serveur 10 / 57 1 Le protocole HTTP 2 Communication par génération 3 Communication par insertion 4 Problème de persistance des données 5 Communication asynchrone

Communication Client-Serveur 11 / 57 Le protocole HTTP

Les protocoles 12 / 57 Protocole = Langage de communication Ensemble de règles et de procédures à respecter pour émettre et recevoir des données sur un réseau Différents protocoles selon ce que attend de la communication : FTP : Échange de fichiers HTTP : Transfert de pages Web SMTP : Transfert de courrier electronique ICMP : Gestion des erreurs de transmission... Deux grandes catégories de protocoles : Les protocoles orientés connexion : Contrôle de transmission des données Les protocoles non orientés connexion : La machine émettrice envoie des données sans prévenir la machine réceptrice, et la machine réceptrice reçoit les données sans envoyer d accusé de réception à la première

Les protocoles 13 / 57 Les protocoles respectent un modèle en couches (ensemble de couches empilées) : Chaque couche dialogue avec la couche juste au-dessus et celle juste au-dessous : Elle fournit des services à la couche au-dessus Elle utilise les services de la couche en-dessous Chaque couche encapsule les données venant de la couche du dessus en y ajoutant ses propres informations Analogie : Communication entre deux personnes ne parlant pas la même langue

Les protocoles normalisés de l ISO (International Standards Organisation) 14 / 57 Modèle OSI (Open Systems Interconnection)

Le Protocole HTTP 15 / 57 HyperText Transfer Protocol (HTTP) Protocole développé pour la communication client-serveur dans le cadre du Web Protocole de la couche application du modèle OSI S appuie sur le protocole TCP pour le transport des données Utilise le port 80 (443 pour HTTPS) Manipulation de 2 types d objets : Un objet requête : HttpRequest Un objet reponse : HttpResponse

L objet Request 16 / 57 Requête HTTP = texte envoyé au serveur par le navigateur : Une ligne introductive contenant : La méthode utilisée L url demandée La version du protocole utilisé par le client (généralement HTTP/1.0) Une partie d en-tête contenant un ensemble de lignes facultatives permettant de donner des informations supplémentaires sur la requête et/ou le client Une partie corps de la requête contenant les données à transmettre (dans le cas d une transmission d informations par la méthode POST) Objet Request METHODE URL VERSION EN TETE : Valeur... EN TETE : Valeur Ligne vide CORPS DE LA REQUETE

L objet Request 17 / 57 Méthode = Commande informant le serveur sur l action à effectuer concernant l URL spécifiée GET : demande le téléchargement d une ressource (url spécifiée) HEAD : demande des informations sur une ressource POST : permet d envoyer des données à la ressource PUT : permet de remplacer ou d ajouter une ressource sur le serveur DELETE : permet de supprimer une ressource du serveur Pour l envoi de données à partir d un formulaire, on peut en fait utiliser GET ou POST GET : Les informations sont ajoutées en fin de l URL demandée (après "?") POST : Les informations sont insérées dans le corps de l objet Request (plus sûr) Envoi de données à partir d un formulaire <form action ="main. php " method=" get "> <form action =" http : / / localhost :8080/ LI260 / ConnexionServlet " method=" post ">

L objet Request 18 / 57 En-têtes de requête Accept : Type de contenu accepté par le browser (text/html, text/plain, text/xml, application/json, audio/mpeg,...). Authorization : Données d authentification du client auprès du serveur Content-Type : Type de contenu du corps de la requête (application/x-www-form-urlencoded ou multipart/form-data) Cookie : Cookies préalablement enregistrés par le serveur avec une entête de réponse Set-Cookie Referer : URL de la page à partir de laquelle la requête a été effectuée User-Agent : Logiciel formulant la requête...

L objet Response 19 / 57 Réponse HTTP = texte envoyé du serveur au navigateur : Une ligne de statut contenant : La version du protocole utilisé Le code de statut La signification du code Une partie d en-tête contenant un ensemble de lignes facultatives permettant de donner des informations supplémentaires sur la réponse et/ou le serveur Une partie corps de la réponse contenant les données demandées Objet Response VERSION HTTP CODE EXPLICATION EN TETE : Valeur... EN TETE : Valeur Ligne vide CORPS DE LA REPONSE

L objet Response 20 / 57 En-têtes de réponse Content-Type : Type de contenu du corps de la réponse (text/html, text/plain, text/xml, application/json, audio/mpeg,...). Last-Modified : Date de dernière modification de la ressource retournée Location : En cas de redirection, contient l adresse à charger par le navigateur Server : Caractéristiques du serveur ayant envoyé la réponse Set-Cookie : Cookies à enregistrer chez le client User-Agent : Logiciel formulant la requête...

Communication Client-Serveur 21 / 57 Génération de contenu

Communication par génération de contenu 22 / 57

Communication par génération de contenu 23 / 57

Communication par génération de contenu 24 / 57 HTML pas prévu pour accepter des informations externes Une des solutions est alors de demander au serveur de générer le contenu d une nouvelle contenant le résultat du traitement d informations transmises. Exemple de scénario 1 L utilisateur saisit ses identifiants mots de passe dans un formulaire puis valide 2 Les informations saisies sont transmises (de préférence en POST) au serveur 3 Le serveur vérifie la validité des identifiants envoyés (par le biais d une base de données) 4 Selon la validité des informations fournies, le serveur génère une nouvelle page HTML (content-type=text/html). 5 Si les identifiants sont valides, le serveur inclut des informations sur l utilisateur connecté dans la nouvelle page 6 La nouvelle page est retournée au client et chargée par le navigateur

Communication par génération de contenu 25 / 57 Génération de page HTML ################### Page de Connexion ################### <form a c t i o n ="www. l i p 6. serveur. f r / L o g i n S e r v l e t " method="post" > <input type =" text " name=" login " / > <input type =" password " name=" pass " / > <input type =" submit " value =" Envoyer " / > </ form > ################### L o g i n S e r v l e t ################### Récupération des informations dans l objet HTTP Request Déclaration du type du contenu de l objet HTTP Response : text / html V é r i f i c a t i o n des l o g i n / mots de passe dans l a base de données Si ( v a l i d e ) a l o r s Génération d une page HTML contenant les infos de connexion ( par méthodes de type p r i n t (" <HTML> <HEAD>... </BODY> </HTML> " ) ) Sinon Génération d une page HTML contenant le message d erreur FinSi

Communication par génération de contenu 26 / 57 Serveur de génération de pages HTML On passe de pages en pages générées dynamiquement Permet de se déplacer sur des pages contenant les informations dont on a besoin Mais... Il peut s avérer difficile / fastidieux d écrire l ensemble des pages avec des print(), surtout si on a de nombreux cas à gérer Le contenu n est pas séparé des traitements Travail à plusieurs difficile Code rapidement très complexe Évolutions / Modifications coûteuses

Communication Client-Serveur 27 / 57 Insertion de contenu

Communication par insertion de contenu 28 / 57 Plutôt que de générer des pages HTML entières L idée est de ne générer qu une sous-partie de la page à retourner, le reste restant fixe Les pages Web contiennent des marqueurs informant des zones à générer dynamiquement Deux possibilités 1 Intégrer un appel à un programme externe de génération (servlet dans notre cas) dans la page 2 Directement écrire du code serveur dans les pages Web

Communication par insertion de contenu 29 / 57 Intégration d un appel à un programme externe SSI (pour Server Side Includes) permet de faire appel à une servlet externe pour remplir une partie de la page Fichier SSI : bonjour.shtml <HTML> <HEAD> <TITLE>SSI </ TITLE> </HEAD> <BODY> <SERVLET CODE=Bonjour CODEBASE=http : / / localhost :8080/ > <PARAM NAME="nom" VALUE=" Julien "> Si vous l i s e z ce texte, c est que v o t r e serveur Web ne supporte pas l e s S e r v l e t s u t i l i s é e s v i a SSI. </SERVLET> </BODY> </HTML>

Communication par insertion de contenu 30 / 57 SSI Utile pour afficher du contenu stocké sur le serveur (ou des résultats de traitements) Permet de ne pas à avoir à écrire l ensemble de la page à partir de la servlet Mais... Rigide Le serveur doit supporter les directives SSI Utile pour petites insertions dynamiques (comme JavaScript mais côté serveur)

Communication par insertion de contenu 31 / 57 Écrire du code serveur dans les pages Web Possible avec de nombreux langages (PHP, ASP, CGI,...) Pour Java : JSP JSP (pour Java Server Pages) Pages HTML classiques (extension.jsp) mais contenant des balises < %...% > permettant d inclure du code JAVA Le code HTML et les parties de code JAVA de la page jsp sont inclus dans un servlet de génération de contenu HTML au moment du premier appel à la page

Communication par insertion de contenu 32 / 57

Insertion de contenu : les JSP 33 / 57 Deux objets principaux : request : l objet représentant la requête venant du client. out : l objet représentant le flux d impression en sortie Différentes directives (encadrées par < %@...% >) Pour l import de classes : < %@import = monpackage. % > Pour l extension de servlets : < %@extends = maclassepersohttp % > Expressions (encadrées par : < % =...% >) Simples évaluations directement écrites sur la sortie Permettent d éviter l écriture println() Exemple : < % = request.getparameter( parametre )% > Déclarations (encadrées par : < %!...% >) Permet de déclarer des variables globales (qui persistent tant que l on n arrête pas le serveur) Exemple : < %!int nbvisites = 0;% >

Communication par insertion de contenu : JSP 34 / 57 JSP <HTML> <HEAD> <TITLE> JSP</ TITLE> </HEAD> <BODY> <% Code Java %> </BODY> </HTML> Exemple de JSP <HTML> <HEAD> <TITLE> JSP</ TITLE> </HEAD> <BODY> <% i f ( request. getparameter ( " nom " ) == n u l l ) { out. p r i n t l n ( " Bonjour monde! " ) ; } else { out. p r i n t l n ( " Bonjour " + request. getparameter ( " nom " ) + "! " ) ; } %> </BODY> </HTML>

Communication par insertion de contenu : JSP 35 / 57 Autre exemple JSP <% Importation d un paquetage ( package ) %> <%@page import =" java. u t i l. * "% > <html > <head>< t i t l e >Page JSP</ t i t l e > </head> <body> <% Déclaration d une variable globale à la classe %> <%! i n t nombrevisites = 0; %> <% D é f i n i t i o n de code Java %> <% / / I l est p o s s i b l e d é c r i r e du code Java i c i Date date = new Date ( ) ; / / On peut incrémenter une v a r i a b l e globale pour compter l e nombre / / d affichage, par exemple. nombrevisites ++; %> <h1>exemple de page JSP</ h1> <% Impression de v a r i a b l e s %> <p>au moment de l exécution de ce script, nous sommes le <%= date %>.</p> <p>cette page a été affichée <%= nombrevisites %> f o i s! < / p> </body> </ html >

Communication par insertion de contenu 36 / 57 JSP Utile pour afficher du contenu stocké sur le serveur (ou des résultats de traitements) Utile pour envoyer du contenu au serveur Permet de générer facilement des pages Web dynamiques Certainement l une des meilleures solutions (AJAX excepté) mais... Lenteur de réponse lors du premier appel (traduction et compilation nécessaires) Code relativement complexe Séparation peu évidente entre contenu et traitements Comme les SSI, rechargement global d une page même pour des modifications minimes (communication synchrone)

Communication Client - Serveur 37 / 57 Problème de persistance des données Un certain nombre de données sont chargées dans la page du navigateur Identifiant de connexion Informations en provenance du serveur Informations en provenance de l utilisateur Structures de données construites par le client Comment faire en sorte que ces informations ne soient pas perdues après communication avec le serveur? Que ce soit dans le cadre d une communication par génération ou par insertion, on change de page et donc les infos de la page de départ sont perdues...

Communication Client - Serveur : Persistance des données 38 / 57 Différentes possibilités Utilisation de cookies + Persistance possible même après redémarrage du client Problème pour les informations volumineuses Certains utilisateurs refusent les cookies Détournement de cookies Utilisation de l adresse IP + Permet de savoir d où vient la requête Uniquement pour le suivi d utilisateur Problème de partage d IP / d ordinateur Problème avec utilisateur à IP non fixes Renvoi des informations à chaque communication Utilisation de l URL pour GET et de champs de formulaire cachés pour POST + Bonne maitrise des informations échangées Gestion difficile (le renvoi systématique peut s avérer complexe / fastidieux) Forte consommation de bande passante

Communication Client - Serveur : Persistance des données 39 / 57 Différentes possibilités Utilisation de window.name + Propriété modifiable et pas rechargée lors du changement de page + Possibilité de stocker des objets complexes dans cette propriété Différents onglets / fenêtres ne partagent pas cette propriété Sécurité : Informations stockées disponibles à d autres sites ouverts dans le même onglet Authentification HTTP Le serveur demande un certificat pour accorder l accès à une page web + Permet un bon suivi de l utilisateur Problème de partage de compte La demande de certificat peut effrayer l utilisateur Uniquement pour le suivi d utilisateur

Communication Client - Serveur : Persistance des données 40 / 57 Différentes possibilités Utilisateur d objets locaux partagés Cookies flash gérés par Adobe Flash Player + Flash Player est un plugin très répandu + La taille limite pour un objet local partagé est de 100 kb + Le contrôle des cookies flash est distinct des contrôles des cookies classiques Flash non supporté sur de nombreuses tablettes / smartphones Flash plus ou moins voué à disparaître Sauvegarde dans le navigateur Certains navigateurs permettent de sauvegarder des données dans des objets persistants + Prévu dans HTML 5 Varie encore fortement selon les navigateurs

Communication Client - Serveur : Persistance des données 41 / 57 Différentes possibilités Utilisation de sessions Session HTTP : Table de hachage permettant d enregistrer toutes sortes d informations côté serveur L objet Session correspondant à une navigation en cours est repéré par un identifiant contenu dans l objet Request + Permet de sauvegarder des objets complexes construits par le serveur pour une navigation donnée Nécessité de stocker l id de session quelque part (par défaut dans un cookie créé automatiquement par le serveur) Ne permet pas de sauvegarder les données du client (sauf si on les envoie au serveur)

Communication Client - Serveur : Persistance des données 42 / 57 Différentes possibilités Ne pas changer de page Si l on ne change jamais de page, on n a pas de problème de transmission de données entre pages Avec des techniques de communication asynchrone, il est possible de ne recharger qu une partie de la page + Toutes les informations et structures chargées par le client restent valides, tout au long de la navigation Concerne uniquement les structures côté client (mais possibilité d utiliser des sessions)

Communication Client-Serveur 43 / 57 Communication asynchrone

Communication Client - Serveur 44 / 57 Communication classique 1 Envoi de données au serveur 2 Le serveur traite les données, génère une réponse et la retourne au client 3 Le client charge la réponse reçue Navigation peu fluide Persistance des données difficile

Communication Client - Serveur 45 / 57 Communication asynchrone 1 Un objet intermédiaire permettant la communication est créé par le client. 2 Un gestionnaire de réponse lui est associé. 3 Un script de la page client envoie les données à l objet intermédiaire 4 L objet intermédiaire se charge de former la requête et de la transmettre au serveur 5 Le serveur retourne une réponse au format attendu par le navigateur (xml,text,json,html...) 6 Le gestionnaire de réponse traite les informations reçues et réalise les modifications nécessaires dans l arbre DOM.

Communication Client - Serveur 46 / 57 Communication asynchrone Pas besoin d attendre le traitement de la requête pour continuer la navigation Permet de conserver le contexte de la requête (données précédemment chargées par le navigateur)

Communication asynchrone 47 / 57 Première solution : utilisation de <iframe></iframe> La balise iframe permet de charger le contenu d un fichier (renseigné par src) 1 Ajout d un attribut target au formulaire pointant vers un iframe invisible 2 Au moment de la soumission du formulaire, la ressource pointée par l attribut action est appelée normalement 3 Mais le résultat est chargé dans l iframe pointée par target plutôt que dans la fenêtre principale Pas de rechargement global / Pas de perte de contexte Si l on affecte une fonction à l évènement onload de l iframe, on peut appliquer un traitement selon les éléments retournés par la ressource Modification de certaines données de la page principale

Communication Asynchrone 48 / 57 Exemple d asynchrone avec <iframe> : Envoi de fichier <iframe id =" uploadtrg " name=" uploadtrg " height ="0" width ="0" frameborder ="0" s c r o l l i n g =" yes " > </ iframe > <form id ="myform" action =" AddFileServlet " method=" post " enctype =" multipart / form data " target =" uploadtrg "> </ form > F i l e : < i n p u t type =" f i l e " name=" f i l e " > < i n p u t type =" submit " value =" Submit " i d =" submitbtn "/ > < s c r i p t type =" t e x t / j a v a s c r i p t " > $ ( " iframe " ). load ( f u n c t i o n ( ) { a l e r t ( " Upload ok " ) ; } ) ; </ s c r i p t > Limitations de l asynchrone par iframe : Réponses de requêtes simultanées peuvent se chevaucher Pas de contrôle évident du status de la communication

Communication Client - Serveur 49 / 57 AJAX (Asynchronous Javascript and XML) Objet central : l objet Javascript XMLHttpRequest défini dans tous les navigateurs récents Initialement prévu pour communiquer au format XML mais ce n est pas une obligation.

Communication asynchrone 50 / 57

Communication Asynchrone : AJAX 51 / 57 3 grandes étapes Création de l objet XMLHttpRequest Génération de la requête Gestion de la réponse Création de l objet XMLHttpRequest function getxmlobject ( ) / / XML OBJECT { var xmlhttp = false ; t r y { xmlhttp = new ActiveXObject ( " Msxml2.XMLHTTP " ) ; / / Anciens navigateurs Microsoft } catch ( e ) { t r y { xmlhttp = new ActiveXObject ( " Microsoft.XMLHTTP " ) ; / / Pour IE 6.0 et + } catch ( e2 ) { xmlhttp = false ; } } i f (! xmlhttp && typeof XMLHttpRequest!= undefined ) { xmlhttp = new XMLHttpRequest ( ) ; / / Pour Mozilla, Opera, etc... } r e t u r n xmlhttp ; } env. xmlhttp = new getxmlobject ( ) ; / / Enregistrement de l objet

Communication Asynchrone : AJAX 52 / 57 3 grandes étapes Création de l objet XMLHttpRequest Génération de la requête Gestion de la réponse Génération de la requête i f ( env. xmlhttp ) { env. xmlhttp. open ( "POST", " L o g i n S e r v l e t?", t r u e ) ; env. xmlhttp. onreadystatechange = handleconnect ; env. xmlhttp. setrequestheader ( Content Type, application / x www form urlencoded ) ; env. xmlhttp. send ( " login ="+logname+"&password="+pass ) ; } else { a l e r t ( " AJAX Probleme : xmlhttp i n t r o u v a b l e " ) ; }

Communication Asynchrone : AJAX 53 / 57 3 grandes étapes Création de l objet XMLHttpRequest Génération de la requête Gestion de la réponse Gestion de la réponse f u n c t i o n handleconnect ( ) { i f ( xmlhttp. readystate == 4) { i f ( xmlhttp. s t a t u s == 200) { var rep=xmlhttp. responsexml. documentelement ; a l e r t ( rep. getelementsbytagname ( status ) [ 0 ]. f i r s t C h i l d. data ) ; } else { a l e r t ( xmlhttp. s t a t u s +" E r r o r during AJAX c a l l. Please t r y again " ) ; } } }

Communication Asynchrone : AJAX 54 / 57 JQuery propose une fonction $.ajax(obj) simplifiant grandement la mise en œuvre d AJAX Le paramètre obj est un objet contenant les attributs suivants : type : methode GET ou POST data : chaine contenant les données à envoyer (ou objet avec attributs simples), à la manière des informations ajoutées à l URL par GET datatype : type de données que l on attend en retour ("text", "json", "xml", "html", "script") error : Fonction à appeler en cas de problème au cours de la communication success : Fonction à appeler en cas de succès de la communication (cette fonction doit attendre un argument qui contiendra les données de réponse formatées selon datatype) url : url de la ressource à interroger (Servlet dans notre cas)

Communication Asynchrone : AJAX 55 / 57 AJAX avec JQuery $. ajax ( { type : "POST", u r l : " AjoutSupContactServlet ", data : " i d ="+env. a c t i f +"& i d _ u t i l ="+ user. i d +"& contact = " + ( ( user. contact )? 0 : 1 ), datatype : " json ", success : f u n c t i o n ( rep ) { i f ( ( rep. e r r o r ==undefined ) ( rep. e r r o r ==0)){ i f ( user. contact ) { a l e r t ( user. l o g i n +" r e t i r é de v o t r e l i s t e de contacts " ) ; user. contact = f a l s e ; } else { a l e r t ( user. l o g i n +" a jouté à v o t r e l i s t e de contacts " ) ; user. contact = t r u e ; } } else { i f ( rep. e r r o r ==1){ a l e r t ( " Problème base de données " ) ; } else { a l e r t ( " Problème serveur " ) ; } } }, error : function ( jqxhr, textstatus, errorthrown ) { a l e r t ( t e x t S t a t u s ) ; } } ) ;

Communication Asynchrone : AJAX 56 / 57 A noter Pas de redirection avec AJAX Avec AJAX, l émission de la requête et la gestion de la réponse sont réalisées sur la même page AJAX ne gère donc pas les redirections vers d autres pages Se connecter sur connexion.html et obtenir la réponse sur main.html est alors impossible en AJAX Utiliser pour cela d autres techniques (telles que JSP) Upload de fichier difficile Par sécurité, les navigateurs interdisent à Javascript de récupérer le fichier renseigné dans un input de type file Utilisation de XMLHttpRequest alors impossible Passer par des iframes

Communication Asynchrone 57 / 57 Discussion intéressante sur les avantages / inconvénients de l utilisation de XMLHttpRequest plutôt que de passer par des iframes : http://ajax.sys-con.com/node/188390