La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA

Présentations similaires


Présentation au sujet: "11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA"— Transcription de la présentation:

1 11:26:40 Programmation Web Programmation Web : Protocole HTTP Jérôme CUTRONA

2 211:26:40 Programmation Web Introduction HTTP : HyperText Transfer Protocol HTTP : HyperText Transfer Protocol HTTP : Protocole du Web HTTP : Protocole du Web Protocole d'échange entre client et serveur Protocole d'échange entre client et serveur Protocole orienté ligne de caractères Protocole orienté ligne de caractères Dans notre cas : Dans notre cas : Étude du protocole pour la culture (ça rime avec torture) Étude du protocole pour la culture (ça rime avec torture) Compréhension des cookies Compréhension des cookies Compréhension des sessions Compréhension des sessions Utilisation avancée de PHP (côté serveur) Utilisation avancée de PHP (côté serveur) Utilisation dAJAX Utilisation dAJAX

3 311:26:40 Programmation Web Réseau Utilisation de HTTP/1.0 Client Web (Navigateur) Serveur Web (Apache) Connexion TCP (port 80) Validation de la connexion Requête HTTP Réponse HTTP Fermeture de connexion

4 411:26:40 Programmation Web Remarques importantes Le client ouvre la connexion Le client ouvre la connexion Le serveur ferme la connexion Le serveur ferme la connexion 1 transaction = 1 ressource transférée (v 1.0) 1 transaction = 1 ressource transférée (v 1.0) Protocole sans état Protocole sans état Aucune information gardée entre deux transactions Aucune information gardée entre deux transactions Le serveur "oublie" le client après chaque transaction Le serveur "oublie" le client après chaque transaction Problème pour la gestion d'une session Problème pour la gestion d'une session

5 511:26:40 Programmation Web Autres remarques importantes Le client demande des ressources Le client demande des ressources Le serveur répond aux demandes des clients : Le serveur répond aux demandes des clients : Délivre la ressource demandée si possible Délivre la ressource demandée si possible Informe de la raison de non remise Informe de la raison de non remise Echanges multi-plateforme Echanges multi-plateforme ASCII 7bits (encodage si non ASCII 7bits) ASCII 7bits (encodage si non ASCII 7bits) Requêtes émises en clair Requêtes émises en clair Réponses émises en clair Réponses émises en clair

6 611:26:40 Programmation Web Structure d'un message HTTP Orienté lignes de caractères : = retour à la ligne = retour à la ligne Requête ou réponse : Requête ou état Requête ou état [Entête: valeur ] [… ] Ligne blanche Ligne blanche [Corps de message] HTTP 1.0: 16 en-têtes HTTP 1.1: 46 en-têtes

7 711:26:40 Programmation Web Requête HTTP 1.0 GET|POST|HEAD chemin HTTP/1.0 GET|POST|HEAD chemin HTTP/1.0 User-Agent: agent User-Agent: agent [Entête: valeur ] [… ] Ligne blanche Ligne blanche [Données] Netiquette

8 811:26:40 Programmation Web Méthodes de requête HTTP GET demande des informations et la ressource désignée HEAD demande des informations concernant la ressource POST envoie de données (formulaire vers le serveur) et demande la ressource désignée PUT enregistrement du corps de la requête à l URL indiquée DELETE suppression de la ressource désignée par l URL

9 911:26:40 Programmation Web Exemple de requête HTTP GET / HTTP/1.0 GET / HTTP/1.0 Ligne blanche Ligne blanche PUT /page1.html HTTP/1.0 PUT /page1.html HTTP/1.0 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.7) Gecko/ Firefox/1.0.3 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.7) Gecko/ Firefox/1.0.3 Ligne blanche Ligne blanche

10 1011:26:40 Programmation Web Réponse HTTP HTTP/version code phrase HTTP/version code phrase Content-Type: type_mime Content-Type: type_mime [Entête: valeur ] [… ] Ligne blanche Ligne blanche [Données] Obligatoire Le client doit être informé de la nature de la ressource : HTML Image JPEG Doc PDF Animation Flash …

11 1111:26:40 Programmation Web Exemple de réponse HTTP HTTP/1.x 200 OK HTTP/1.x 200 OK Date: Mon, 25 Apr :25:17 GMT Date: Mon, 25 Apr :25:17 GMT Server: Apache/ (Red Hat) Server: Apache/ (Red Hat) X-Powered-By: PHP/4.3.2 X-Powered-By: PHP/4.3.2 Content-Type: text/html Content-Type: text/html Ligne blanche Ligne blanche ......

12 1211:26:40 Programmation Web États des réponses HTTP Codes à 3 chiffres + phrase Codes à 3 chiffres + phrase 1er chiffre : classe de réponse 1er chiffre : classe de réponse 1xx : Information (HTTP 1.1) 1xx : Information (HTTP 1.1) 2xx : Succès 2xx : Succès 200 OK 200 OK 3xx : Redirection 3xx : Redirection 304 NOT MODIFIED 304 NOT MODIFIED 4xx : Erreur client 4xx : Erreur client 403 FORBIDDEN 403 FORBIDDEN 404 NOT FOUND 404 NOT FOUND 5xx : Erreur serveur 5xx : Erreur serveur 500 INTERNAL ERROR 500 INTERNAL ERROR

13 1311:26:40 Programmation Web Protocole HTTP 1.1 Contexte HTTP 1.0 : Contexte HTTP 1.0 : 1 transaction = 1 ressource transmise 1 transaction = 1 ressource transmise Pas de connexion persistante Pas de connexion persistante Mauvaise utilisation du cache Mauvaise utilisation du cache 1 IP = 1 serveur Web 1 IP = 1 serveur Web Améliorations HTTP 1.1 : Améliorations HTTP 1.1 : 1 transaction persistante = X ressources transmises 1 transaction persistante = X ressources transmises Connexion persistante Connexion persistante Standardisation du cache Standardisation du cache Découpage d'une ressource (chunk encoding) Découpage d'une ressource (chunk encoding) 1 IP = X serveurs Web (serveurs virtuels) 1 IP = X serveurs Web (serveurs virtuels)

14 1411:26:40 Programmation Web Protocole HTTP 1.1 Contraintes du client : Contraintes du client : inclure l'en-tête Host: à chacune des requêtes. Le serveur physique doit savoir quel serveur virtuel interroger inclure l'en-tête Host: à chacune des requêtes. Le serveur physique doit savoir quel serveur virtuel interroger accepter des réponses avec des données encodées de type chunked accepter des réponses avec des données encodées de type chunked supporter les connections persistantes, ou inclure l'en-tête Connection: close à chacune des requêtes supporter les connections persistantes, ou inclure l'en-tête Connection: close à chacune des requêtes supporter la réponse 100 Continue supporter la réponse 100 Continue

15 1511:26:40 Programmation Web Requête HTTP 1.1 GET|POST|HEAD chemin HTTP/1.1 GET|POST|HEAD chemin HTTP/1.1 Host: hôte Host: hôte User-Agent: agent User-Agent: agent [header ] [… ] Ligne blanche Ligne blanche [Données] Obligatoire Netiquette

16 1611:26:40 Programmation Web Soumission de formulaires Requête HTTP : GET form.php?p1=X&p2=Y HTTP/1.0 GET form.php?p1=X&p2=Y HTTP/1.0 Ligne blanche Ligne blanche Traduit dans l'URL : Peut donc être mis en favori Valeurs saisies dans le formulaire : Couples nom_champ=valeur_encodée séparés par &

17 1711:26:40 Programmation Web Soumission de formulaires Requête HTTP : POST index.html HTTP/1.0 POST index.html HTTP/1.0 Content-Type: application/x-www-form-urlencoded Content-Type: application/x-www-form-urlencoded Content-Length: 9 Content-Length: 9 Ligne blanche Ligne blanche p1=X&p2=Y NON traduit dans l'URL Ne peut donc PAS être mis en favori Valeurs saisies dans le formulaire : Couples nom_champ=valeur_encodée séparés par &

18 1811:26:40 Programmation Web Encodage des données Protocole HTTP : ASCII 7bits (base commune à toutes les plateformes) Tout caractère non ASCII 7bits doit être encodé URL URL saisies dans les formulaires saisies dans les formulaires Principe dencodage : Espace + Espace + Caractères spéciaux %code_ASCII_hexa Caractères spéciaux %code_ASCII_hexa Caractères accentués %code_ASCII_hexa Caractères accentués %code_ASCII_hexa Exemples : ô %F4 Exemples : ô %F4 [ %5B

19 1911:26:40 Programmation Web Cookies But : But : Éviter que le serveur « oublie le client » Éviter que le serveur « oublie le client » Maintenir un « mode connecté » (= session) Maintenir un « mode connecté » (= session) Rendre transparent un échange client / serveur Rendre transparent un échange client / serveur Exemple e-commerce : ajouter des articles au panier Exemple e-commerce : ajouter des articles au panier Serveur : Serveur : Set-Cookie: var=val[; expires=date; path=chemin; domain=domaine] Client : Client : Cookie: var=val;

20 2011:26:40 Programmation Web Réseau Cookies, principe des échanges Client Web (Navigateur) Serveur Web (Apache) GET / HTTP/1.1 HTTP/ OK Set-Cookie: Id=1212; path=/; GET /liste HTTP/1.1 Cookie: Id=1212 HTTP/ OK … Id=1212; path=/; path=/;

21 2111:26:40 Programmation Web Cookies Avantages : Avantages : Rappelle au serveur des informations sur le client Rappelle au serveur des informations sur le client L'échange de la données dans le sens serveur client est limité au dépôt du cookie L'échange de la données dans le sens serveur client est limité au dépôt du cookie Ne nécessite pas de modifier les pages HTML Ne nécessite pas de modifier les pages HTML Compatible avec les formulaires Compatible avec les formulaires Le cookie a une durée de validité Le cookie a une durée de validité Inconvénients : Inconvénients : Les données circulent en permanence dans le sens client serveur Les données circulent en permanence dans le sens client serveur Les données circulent en clair sur le réseau Les données circulent en clair sur le réseau La quantité de données doit être limitée La quantité de données doit être limitée

22 2211:26:40 Programmation Web Cookies en PHP Placer un cookie sur le client : bool setcookie( string name [, string value [, int expire [, string path [, string domain [, bool secure [, bool httponly ]]]]]] ) Placer un cookie sur le client : bool setcookie( string name [, string value [, int expire [, string path [, string domain [, bool secure [, bool httponly ]]]]]] ) Nom du cookie Valeur du cookie Date d'expiration (timestamp UNIX) : Dans 10 jours : time()+10*24*60*60 Si non précisé, expire à la fermeture du navigateur Chemin de validité, disponibilité : / tout le serveur /prive sous-arborescence "prive" Par défaut : répertoire où le cookie est défini Domaine de validité, disponibilité : example.com le domaine example.com le domaine example.comwww.example.com le sous-domaine le sous-domaine Cookie sécurisé ? true uniquement si HTTPS false défaut, HTTP et HTTPS Cookie uniquement par HTTP ? true uniquement HTTP false défaut, HTTP, JavaScript, …

23 2311:26:40 Programmation Web Cookies en PHP Vérifier la présence d'un cookie : Vérifier la présence d'un cookie : tableau associatif superglobal $_COOKIE tableau associatif superglobal $_COOKIE ex : cookie 'passage' $_COOKIE['passage'] ex : cookie 'passage' $_COOKIE['passage'] Remarques utiles : Remarques utiles : Le cookie doit être placé avant echo (en-tête HTTP) Le cookie doit être placé avant echo (en-tête HTTP) Le cookie placé avec setcookie() n'est accessible qu'au prochain chargement de page : En-tête HTTP Set-Cookie: suivi de l'en-tête HTTP Cookie: à la demande de page suivante Le cookie placé avec setcookie() n'est accessible qu'au prochain chargement de page : En-tête HTTP Set-Cookie: suivi de l'en-tête HTTP Cookie: à la demande de page suivante Effacer un cookie déjà placé : le replacer avec les mêmes paramètres mais avec une valeur vide ou false Effacer un cookie déjà placé : le replacer avec les mêmes paramètres mais avec une valeur vide ou false

24 2411:26:40 Programmation Web Sessions Stockage sur le serveur de données associées à un client particulier Stockage sur le serveur de données associées à un client particulier Nécessite une identification unique pertinente et persistante des clients Nécessite une identification unique pertinente et persistante des clients Identifiant de session (MD5 128bits / SHA-1 160bits) Identifiant de session (MD5 128bits / SHA-1 160bits) Persiste par paramètre d'URL ou cookie Persiste par paramètre d'URL ou cookie Évite l'échange permanent de données (en dehors de l'identifiant) Évite l'échange permanent de données (en dehors de l'identifiant) Nécessite la linéarisation des variables pour leur stockage (fichier, BD, personnalisé) Nécessite la linéarisation des variables pour leur stockage (fichier, BD, personnalisé) Simule un mode connecté Simule un mode connecté

25 2511:26:40 Programmation Web Sessions Réseau Client 1 Serveur A Démarrer session id : A Données de session pour A GET / Set-Cookie: … Cookie: … OK: … Client 2 B Démarrer session id : B Données de session pour B GET / Set-Cookie: … Cookie: … OK: … Cookie id : A Cookie id : B

26 2611:26:40 Programmation Web Sessions Créer ou restaurer une session Créer ou restaurer une session bool session_start ( void ) bool session_start ( void ) Manipuler les données de session Manipuler les données de session Tableau associatif superglobal $_SESSION Tableau associatif superglobal $_SESSION Lire ou définir l'identifiant de session Lire ou définir l'identifiant de session string session_id ( [string id] ) string session_id ( [string id] ) Détruire toutes les variables d'une session Détruire toutes les variables d'une session void session_unset ( void ) void session_unset ( void ) Détruire une session Détruire une session bool session_destroy ( void ) bool session_destroy ( void )

27 2711:26:40 Programmation Web Sessions Modifie les paramètres du cookie de session void session_set_cookie_params ( int lifetime [, string path [, string domain [, bool secure [, bool httponly ]]]] ) Modifie les paramètres du cookie de session void session_set_cookie_params ( int lifetime [, string path [, string domain [, bool secure [, bool httponly ]]]] ) Date d'expiration (timestamp UNIX) : Dans 10 jours : time()+10*24*60*60 Si non précisé, expire à la fermeture du navigateur Chemin de validité, disponibilité : / tout le serveur /prive sous-arborescence "prive" Par défaut : répertoire où le cookie est défini Domaine de validité, disponibilité : example.com le domaine example.com le domaine example.comwww.example.com le sous-domaine le sous-domaine Cookie sécurisé ? true uniquement si HTTPS false défaut, HTTP et HTTPS Cookie uniquement par HTTP ? true uniquement HTTP false défaut, HTTP, JavaScript, …

28 2811:26:40 Programmation Web Réseau Procédure d'authentification Client Serveur Base de données login pass ? Problème Le données circulent en clair sur le réseau Problème Injection de code SQL requêtes préparées requêtes préparées

29 2911:26:40 Programmation Web Réseau Procédure d'authentification sécurisée Client Serveur Base de données Codage ? Problème Injection de code SQL requêtes préparées requêtes préparées challengechallenge Codage donnée login pass donnée challenge Sécurité Le données qui circulent sont propres à chaque connexion Données de session

30 3011:26:40 Programmation Web Sérialisation d'objets Les objets peuvent être stockés dans les données de session Les objets peuvent être stockés dans les données de session Linéarisation de l'objet réduit à une chaîne Linéarisation de l'objet réduit à une chaîne Impossible pour le type ressource Impossible pour le type ressource Impossible pour les références croisées Impossible pour les références croisées Restauration possible (PHP >= 4) Restauration possible (PHP >= 4) session_start() ; $p = new Point(12, 15) ; $_SESSION['monpoint'] = $p ; session_start() ; $p = $_SESSION['monpoint'] ;

31 3111:26:40 Programmation Web Sérialisation d'objets Méthodes magiques __sleep et __wakeup Méthodes magiques __sleep et __wakeup __sleep __sleep Appelée avant la linéarisation Appelée avant la linéarisation Doit retourner un tableau contenant le nom des attributs à linéariser Doit retourner un tableau contenant le nom des attributs à linéariser Choix des attributs à sauvegarder Choix des attributs à sauvegarder Terminer correctement l'objet (déconnexion BD, ressource ouverte, requête en cours, …) Terminer correctement l'objet (déconnexion BD, ressource ouverte, requête en cours, …) __wakeup __wakeup Appelée après la délinéarisation Appelée après la délinéarisation Restaurer des attributs non sauvegardés (BD, …) Restaurer des attributs non sauvegardés (BD, …)

32 3211:26:40 Programmation Web Sérialisation : exemple class Point { private $coord ; private $coord ; private $info ; private $info ; public function __construct($_x, $_y) { public function __construct($_x, $_y) { if (!is_numeric($_x) || !is_numeric($_y)) { if (!is_numeric($_x) || !is_numeric($_y)) { throw new Exception( throw new Exception( "Paramètres non numériques ($_x, $_y)") ; "Paramètres non numériques ($_x, $_y)") ; } } $this->coord['x'] = $_x ; $this->coord['x'] = $_x ; $this->coord['y'] = $_y ; $this->coord['y'] = $_y ; $this->info = 'Nouveau' ; $this->info = 'Nouveau' ; }…

33 3311:26:40 Programmation Web Sérialisation : exemple public function __get($_prop) { public function __get($_prop) { if (!array_key_exists($_prop, $this->coord)) { if (!array_key_exists($_prop, $this->coord)) { throw new Exception( throw new Exception( "Accès à une propriété inconnue ($_prop)") ; "Accès à une propriété inconnue ($_prop)") ; } return $this->coord[$_prop] ; return $this->coord[$_prop] ; } public function __set($_prop, $_val) { public function __set($_prop, $_val) { if (!is_numeric($_val)) if (!is_numeric($_val)) throw new Exception("Valeur non numérique ($_val)"); throw new Exception("Valeur non numérique ($_val)"); if (!array_key_exists($_prop, $this->coord)) if (!array_key_exists($_prop, $this->coord)) throw new Exception( throw new Exception( "Accès à une propriété inconnue ($_prop)") ; "Accès à une propriété inconnue ($_prop)") ; return $this->coord[$_prop] = $_val ; return $this->coord[$_prop] = $_val ;}

34 3411:26:40 Programmation Web Sérialisation : exemple public function __sleep() { public function __sleep() { return array('coord') ; return array('coord') ; } public function __wakeup() { public function __wakeup() { $this->info = 'Restauré' ; $this->info = 'Restauré' ; } public function affiche() { public function affiche() { echo " \n" ; echo " \n" ; var_dump($this) ; var_dump($this) ; echo " \n" ; echo " \n" ; }}

35 3511:26:40 Programmation Web Sérialisation : exemple affiche() ; ?> Linéarisation : appel de __sleep() Délinéarisation : appel de __wakeup() object(Point)#1 (2) { ["coord:private" ["coord:private" => array(2) { => array(2) { ["x"]=> int(1) ["x"]=> int(1) ["y"]=> int(12) } ["y"]=> int(12) } ["info:private"]=> ["info:private"]=> string(8) "Restauré" string(8) "Restauré"} public function __wakeup() { public function __wakeup() { $this->info = 'Restauré' ; $this->info = 'Restauré' ; }


Télécharger ppt "11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA"

Présentations similaires


Annonces Google