Programmation Web : Protocole HTTP

Slides:



Advertisements
Présentations similaires
Novembre 2005 – Michel Desconnets PHP : théorie Objectif : introduire les concepts globaux permettant d'aborder la programmation en PHP.
Advertisements

Cours de C – Séance dexercices 19 Octobre Objectif Ecrire un serveur HTTP Sans gérer la partie réseau, on utilisera un utilitaire pour cela Serveur.
PHP Accès au système de fichiers
Cours de C – Séance dexercices 02 Octobre Protocole: client Protocole : – Requête client : GET /test.html HTTP/1.1\r\n Host: nom_de_l_hote\r\n Parameter:
Internet.
Personal Home Page / Hypertext Processor (PHP)
Le mécanisme de Single Sign-On CAS (Central Authentication Service)
TP 3-4 BD21.
Formulaire HTML Introduction. Définition de formulaire.
Programmation Web : Protocole HTTP
11:16:331 Programmation Web Programmation Web : Formulaires HTML Jérôme CUTRONA
Jérôme CUTRONA PHP et bases de données Jérôme CUTRONA 01:07:51 Programmation Web
PhpMyAdmin 01:08:02 Programmation Web
Jérôme CUTRONA PHP objet Jérôme CUTRONA 01:08:01 Programmation Web
Jérôme CUTRONA PHP PDO Jérôme CUTRONA 01:08:01 Programmation Web
11:37:32 Programmation Web PHP5 objet "avancé" Jérôme CUTRONA
Bases de données Objet singleton pour la connexion
PHP Interface base de données
Bases de données Objet singleton pour la connexion
Cours n°3 Les formulaires
Révision Avant lintra – Architecture de lordinateur, les composants, le fonctionnement, codage – Système dexploitation: organisation des données (fichier),
Common Gateway Interface
Le Téléphone Russe Le Téléphone Russe. Le Téléphone Russe Le Téléphone Russe.
CPI/BTS 2 Programmation Web Introduction au PHP
Le langage PHP 5.
Le langage ASP Les variables d'environnement HTTP avec Request.
Programmation multimédia 3 Les objets de ASP Semaine 2 Préparé par Marc Aubé Source :
Développement Rapide dApplications Web avec.NET « Mon premier site »
Ecole Supérieure Privée de ingénierie et de technologie année universitaire :2013/2014 Cross-Plateform Cours JavaScript.
Les instructions PHP pour l'accès à une base de données MySql
ASP.NET Par: Hugo St-Louis. C ARACTÉRISTIQUES A SP. NET Évolution, successeur plus flexible quASP (Active Server Pages). Pages web dynamiques permettant.
Développement dapplications web Authentification, session.
Abderrahmane Bouarissa Damien Burglin Arnaud Sansig
1 PHP 1.Langage PHP 1.1. Types de base, variables et constantes 1.2. Opérateurs et expressions 1.3. Instructions 1.4. Fonctions 2.Accès aux bases de données:
PHP Géant Aurélien. PHP (Hypertext Preprocessor) Langage de scripts libre Permet produire des pages Web dynamiques dispose d'un très grand nombre d'API(Application.
Web dynamique PhP + MySQL AYARI Mejdi 2006
AJAX.
Protocoles et service internet: http
Modex Web Dominique Rossin
Document élaboré à Centrale Paris par Pascal Morenton LES TECHNOLOGIES DU WEB 1. LES PHASES D UN DEPLOIEMENT DE RESEAUX 2. LE LANGAGE HTML 3. LE LANGAGE.
Initiation au web dynamique
Animateur : Med HAIJOUBI
PHP & My SQL.
Jean-Michel ILIE - novembre SIL - module M12 Programmation Internet en PHP SIL module M12 Jean-Michel Ilié IUT Paris 5 - département informatique.
Couche application Perl, php, javascript ftp
Techniques Internet de Base Licence 2 (Info, Maths, PC/PA) Université Jean Monnet Ruggero G. PENSA
JavaScript Nécessaire Web.
Travail de diplôme José Garrido Professeur : Philippe Freddi Explorer Internet en toute sécurité Surf Safe SPY INTERNET.
PHP 5° PARTIE : LES COOKIES
0 Objectifs de la session n°1  Revenir sur toutes les bases théoriques nécessaires pour devenir un développeur Web,  Découvrir l’ensemble des langages.
Cours de programmation web
Programmation multimédia 3 Les Témoins (Cookies) Semaine 4 Préparé par Marc Aubé Source :
11 mars 2008© présente Bien utiliser son navigateur Internet Tous droits réservés.
Annexe 2 entêtes HTTP et cookies. Accéder aux objets requêtes et réponses Ces objets sont disponibles dans les classes clé depuis la méthode awake les.
420-B63 Programmation Web Avancée Auteur : Frédéric Thériault 1.
Installation et Configuration Internet Information Server (IIS 6)
http 1.1.  connexion persistante Browser Mozilla Firefox Adresse ip.
Abderrahmane Bouarissa Damien Burglin Arnaud Sansig
PHP 6° PARTIE : LES SESSIONS 1.Introduction 2.Identificateur de session 3.Variables de session 4.Client / Serveur 5.Principe 6.Ouverture de session 7.Enregistrement.
PHP5 objet "avancé" Jérôme CUTRONA 09:56:48 Programmation Web
 Formulaires HTML : traiter les entrées utilisateur
Initiation au JavaScript
Protocole HTTP, cookies, sessions, authentification
Programmation Web : Protocole HTTP
Bases de données Singleton pour la connexion
SOAP et les RPC XML SOAP WSDL RPC. Rappels sur le XML Langage avec des balises Très lisible Pour stocker des données Séparation entre contenu et présentation.
L. Gurret – M. Herve – P. Mignon – J. Prarioz. Introduction  Dernière étape d’analyse  Cahier des charges, spécifications et conception orientée objet.
TWP Toolkit Formation 21/10/2009.
Développement d’applications Web
A. DAAIF ENSET Mohammedia Université Hassan II Casablanca.
Transcription de la présentation:

Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr 01:07:51 Programmation Web 2012-2013

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

Validation de la connexion Fermeture de connexion Utilisation de HTTP/1.0 Réseau Client Web (Navigateur) Serveur Web (Apache) Connexion TCP (port 80) Validation de la connexion Requête HTTP Réponse HTTP Fermeture de connexion 01:07:51 Programmation Web 2012-2013

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

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

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

Requête HTTP 1.0 GET|POST|HEAD chemin HTTP/1.0  User-Agent: agent  [Entête: valeur ] [… ] Ligne blanche  [Données] Netiquette 01:07:51 Programmation Web 2012-2013

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 01:07:51 Programmation Web 2012-2013

Exemple de requête HTTP GET / HTTP/1.0  Ligne blanche  PUT /page1.html HTTP/1.0  User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.7) Gecko/20050414 Firefox/1.0.3  01:07:51 Programmation Web 2012-2013

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

Exemple de réponse HTTP HTTP/1.x 200 OK  Date: Mon, 25 Apr 2005 04:25:17 GMT  Server: Apache/2.0.46 (Red Hat)  X-Powered-By: PHP/4.3.2  Content-Type: text/html  Ligne blanche  <html> <head><title> ... 01:07:51 Programmation Web 2012-2013

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

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

Protocole HTTP 1.1 Contraintes du client : 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 supporter les connections persistantes, ou inclure l'en-tête Connection: close à chacune des requêtes supporter la réponse 100 Continue 01:07:51 Programmation Web 2012-2013

Requête HTTP 1.1 GET|POST|HEAD chemin HTTP/1.1  Host: hôte  User-Agent: agent  [header ] [… ] Ligne blanche  [Données] Obligatoire Netiquette 01:07:51 Programmation Web 2012-2013

Soumission de formulaires <form action="form.php" method="GET"> Requête HTTP : GET form.php?p1=X&p2=Y HTTP/1.0  Ligne blanche  Traduit dans l'URL : http://abc/form.php?p1=X&p2=Y Peut donc être mis en favori Valeurs saisies dans le formulaire : Couples nom_champ=valeur_encodée séparés par & 01:07:51 Programmation Web 2012-2013

Soumission de formulaires <form action="form.php" method="POST"> Requête HTTP : POST index.html HTTP/1.0  Content-Type: application/x-www-form-urlencoded  Content-Length: 9  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 & 01:07:51 Programmation Web 2012-2013

Encodage des données Protocole HTTP : ASCII 7bits (base commune à toutes les plateformes) Tout caractère non ASCII 7bits doit être encodé URL saisies dans les formulaires Principe d’encodage : Espace  + Caractères spéciaux  %code_ASCII_hexa Caractères accentués  %code_ASCII_hexa Exemples : ô  %F4 [  %5B 01:07:51 Programmation Web 2012-2013

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

Cookies, principe des échanges Réseau Client Web (Navigateur) Serveur Web (Apache) Id=1212; path=/; GET / HTTP/1.1 HTTP/1.1 200 OK Set-Cookie: Id=1212; path=/; GET /liste HTTP/1.1 Cookie: Id=1212 HTTP/1.1 200 OK … 01:07:51 Programmation Web 2012-2013

Cookies Avantages : Inconvénients : 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 Ne nécessite pas de modifier les pages HTML Compatible avec les formulaires Le cookie a une durée de validité Inconvénients : Les données circulent en permanence dans le sens client  serveur Les données circulent en clair sur le réseau La quantité de données doit être limitée 01:07:51 Programmation Web 2012-2013

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 ]]]]]] ) Chemin de validité, disponibilité : /  tout le serveur /prive  sous-arborescence "prive" Par défaut : répertoire où le cookie est défini Date d'expiration (timestamp UNIX) : Dans 10 jours : time()+10*24*60*60 Si non précisé, expire à la fermeture du navigateur Domaine de validité, disponibilité : example.com  le domaine example.com www.example.com  le sous-domaine www.example.com Valeur du cookie Nom du cookie Cookie uniquement par HTTP ? true  uniquement HTTP false  défaut, HTTP, JavaScript, … Cookie sécurisé ? true  uniquement si HTTPS false  défaut, HTTP et HTTPS 01:07:51 Programmation Web 2012-2013

Cookies en PHP Vérifier la présence d'un cookie : Remarques utiles : tableau associatif superglobal $_COOKIE ex : cookie 'passage'  $_COOKIE['passage'] Remarques utiles : 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 Effacer un cookie déjà placé : le replacer avec les mêmes paramètres mais avec une valeur vide ou false 01:07:51 Programmation Web 2012-2013

Sessions Stockage sur le serveur de données associées à un client particulier Nécessite une identification unique pertinente et persistante des clients Identifiant de session (MD5 128bits / SHA-1 160bits) Persiste par paramètre d'URL ou cookie É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é) Simule un mode connecté 01:07:51 Programmation Web 2012-2013

Sessions Réseau Démarrer session id : B Démarrer session id : A Client 1 Réseau Cookie id : A Serveur Set-Cookie: … Set-Cookie: … Cookie: … Cookie: … GET / OK: … GET / OK: … A B Client 2 Données de session pour B Données de session pour A Cookie id : B 01:07:51 Programmation Web 2012-2013

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

Sessions Modifie les paramètres du cookie de session void session_set_cookie_params ( int lifetime [, string path [, string domain [, bool secure [, bool httponly ]]]] ) Cookie sécurisé ? true  uniquement si HTTPS false  défaut, HTTP et HTTPS Domaine de validité, disponibilité : example.com  le domaine example.com www.example.com  le sous-domaine www.example.com Cookie uniquement par HTTP ? true  uniquement HTTP false  défaut, HTTP, JavaScript, … 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 01:07:51 Programmation Web 2012-2013

Procédure d'authentification Réseau Serveur Client login ? pass Problème Injection de code SQL  requêtes préparées Problème Le données circulent en clair sur le réseau Base de données 01:07:51 Programmation Web 2012-2013

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

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

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

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

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

Sérialisation : exemple public function __sleep() { return array('coord') ; } public function __wakeup() { $this->info = 'Restauré' ; public function affiche() { echo "<pre>\n" ; var_dump($this) ; echo "</pre>\n" ; 01:07:51 Programmation Web 2012-2013

Sérialisation : exemple <?php require_once('point.inc.php') ; session_start() ; $p = new Point(1, 12) ; $_SESSION['point'] = $p ; ?> $p = $_SESSION['point'] ; $p->affiche() ; object(Point)#1 (2) { ["coord:private" => array(2) { ["x"]=> int(1) ["y"]=> int(12) } ["info:private"]=> string(8) "Restauré" } Linéarisation : appel de __sleep() public function __wakeup() { $this->info = 'Restauré' ; } Délinéarisation : appel de __wakeup() 01:07:51 Programmation Web 2012-2013