22

Architecture(s) et application(s) WebApplication Symfony ToDo , en ligne de commande : présentation a chage sortie standard ... (par exemple en PHP) fonctionnent sur / derrière

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Architecture(s) et application(s) WebApplication Symfony ToDo , en ligne de commande : présentation a chage sortie standard ... (par exemple en PHP) fonctionnent sur / derrière

Architecture(s) et application(s)Web

Télécom SudParis

(25/09/2018)

CSC4101 - HTTP et Architecture

d'application Web 3 tiers

Page 2: Architecture(s) et application(s) WebApplication Symfony ToDo , en ligne de commande : présentation a chage sortie standard ... (par exemple en PHP) fonctionnent sur / derrière

CSC4101 2018-2019 CM 2

Table des matières

1 Objectifs de cette séquence 1

2 Architecture 1

3 HTTP 6

4 Fonctionnement des serveurs Web 12

5 Take away 17

6 Ensuite. . . 17

7 Annexes 18

1 Objectifs de cette séquence

Cette deuxième séquence de cours présente les fondements de l'architecture des applications Web,à savoir une architecture client(s)-serveur, avec des traitements mis en ÷uvre à la fois sur un serveuret des clients qui communiquent via le protocole HyperText Transfer Protocol (HTTP).

On présente tout d'abord le schéma d'architecture, en plusieurs couches, avec sa version de base,correspondant à 3 couches (3 tiers).

On étudie ensuite les principaux éléments du protocole HTTP permettant aux clients Web et auxserveurs d'interagir sur le Web.

On termine par la présentation des mécanismes d'exécution de programmes derrière le serveur HTTP,permettant de faire fonctionner des applications Web dynamiques.

2 Architecture

Cette section présente les principes d'architecture des applications Web classiques, et notam-ment l'architecture dite 3 tiers.

2.1 Que trouve-t-on sous le capot d'une application Web ?

2.2 Architecture 3 tiers

Architecture logicielle :� couche de présentation ;� couche de traitement ;� couche d'accès aux données.Simpli�cation de l'approche générale d'une architecture à plusieurs niveaux (multi tier)

L'objectif de cette décomposition en couches est de mieux comprendre la logique des interac-tions entre di�érents composants logiciels mis en ÷uvre pour faire fonctionner une application.Il s'agit ici d'une architecture logicielle/système, indépendant des fonctionnalités fournies partelle ou telle application (on parlerait d'architecture fonctionnelle).On parle aussi d'architecture à trois niveaux ou architecture à trois couches.Le mot tiers est une traduction approximative de l'anglais tier signi�ant étage ou niveau.

2.2.1 Variante ligne de commande

Application Symfony ToDo, en ligne de commande :

présentation a�chage sortie standard

traitement App\Command\ListTodosCommand

accès aux données Doctrine + SQLite

Poly étudiant 1

Page 3: Architecture(s) et application(s) WebApplication Symfony ToDo , en ligne de commande : présentation a chage sortie standard ... (par exemple en PHP) fonctionnent sur / derrière

CSC4101 2018-2019 CM 2

Une application démarre pour une exécution pour un utilisateur unique, dans le contexte d'unshell, en ligne de commande dans un terminal.L'application est un processus de l'interpréteur PHP qui démarre le programme bin/consoledu framework Symfony.L'application est � monolithique �, fonctionnant dans la mémoire d'un seul système d'exploi-tation, en local, en un seul processus.Les 3 couches sont des couches logiques aidant à comprendre l'architecture fonctionnelle del'application.

2.2.2 Variante sur le Web

L'application fonctionne sur un serveur accessible depuis le réseau via le protocole HTTP.Un navigateur Web permet de s'y connecter et de consulter des pages Web présentant le résultatde l'exécution d'un programme fonctionnant dans la mémoire du serveur.Attention, ici, plusieurs clients Web peuvent accéder simultanément à la même applicationfonctionnant sur le serveur Web.

2.2.3 3 couches des applications Web

Déploiement sur le Web des di�érentes couches :� Présentation : pages HTML transmises via le réseau :

� serveur qui les construit� client (navigateur) qui les a�che

� Traitements : programmes :� serveur Web (dialogue HTTP, invocation des applications)� serveur d'applications (exécute des programmes PHP, par exemple)

� Accès aux données� SGBD

Poly étudiant 2

Page 4: Architecture(s) et application(s) WebApplication Symfony ToDo , en ligne de commande : présentation a chage sortie standard ... (par exemple en PHP) fonctionnent sur / derrière

CSC4101 2018-2019 CM 2

Les multiples clients Web (de chacun des utilisateurs) communiquent via HTTP avec un serveurWeb unique.Le navigateur Web qui fait le rendu des pages HTML participe à l'application (présentation).Les clients Web ne sont pas seulement les navigateurs des utilisateurs, mais peuvent aussi êtredes programmes se connectant à des APIs via HTTP.Les programmes écrits par les développeurs (par exemple en PHP) fonctionnent sur / derrièrece serveur Web.Ils peuvent s'exécuter pour e�ectuer des traitements grâce aux services fournis par des serveursd'applications sous-jacents (journeaux, envoi de mails, etc.).Dans cette déclinaison en 3 couches, chaque couche est plus ou moins indépendante des autres.On peut par exemple imaginer que d'autres clients que les clients Web peuvent accéder auxmêmes serveurs d'applications pour interagir avec les programmes (via des protocoles autresque HTTP).De même, les données stockées dans la base de données peuvent être manipulées par d'autresapplications que ces applications Web, ou directement par des utilisateurs via les interfaces duSGBD (cf. CSC3601).

2.3 Évolution des architectures

On va présenter les grandes architectures dans un ordre chronologique d'apparition des tech-nologies :

1. pages statiques

2. applications BD + Web

3. multi-couches

La transition du Web statique jusqu'aux applications multi-tiers a principalement concerné lecôté du serveur Web

2.4 Serveur de pages Web statiques

Historiquement, les premiers serveurs Web se contentent de fournir des pages Web statiques chargéesdepuis des �chiers (documents HTML).

Les �chiers HTML des pages sont stockés sur un système de �chier. Ils sont produits en dehorsdu périmètre de l'application.

2.4.1 Caractéristiques d'un serveur de pages statiques

1. Avantages� E�cace (tient la charge)

2. Inconvénients� Ne permet pas facilement des pages qui se mettent à jour dynamiquement, en fonction des

visites� Encore moins des applications interactives� Problème de cohérence des URLs (renommages, liens cassés, etc.)

Poly étudiant 3

Page 5: Architecture(s) et application(s) WebApplication Symfony ToDo , en ligne de commande : présentation a chage sortie standard ... (par exemple en PHP) fonctionnent sur / derrière

CSC4101 2018-2019 CM 2

Le problème de cohérence des URLs vient du fait qu'un renommage du nom d'une page, ou sondéplacement dans l'arborescence du système de �chiers sur le serveur, nécessite de re-modi�erle contenu de tous les �chiers des pages qui pointent vers celle-ci : l'arborescence logique despages via les liens hypertextes est fortement liée à l'arborescence physique. Des solutions decon�guration ou de compilateur de sites permettent de contourner ce problème, mais c'est peuconfortable.

2.5 Applications BD + Web

Les serveurs servent à faire tourner des applications produisant des pages Web dynamiques, à partirde données issues de bases de données.

BD : Bases de Données. Typiquement via l'interrogation d'un SGBDRNote : on ne revient pas sur les technologies de bases de données dans ce cours, que l'onconsidère comme acquises (programme première année).Les programmes qui produisent les pages peuvent aussi utiliser d'autres sources de donnéesque les bases de données

2.5.1 Caractéristiques d'un serveur pour applications BD + Web

Age d'or du Web : des applications sont possibles : des programmes génèrent des pages Web enfonction des requêtes du client

1. Avantages� Base de données gère l'intégrité des données (transactions, accès multiples, intégrité référen-

tielle, . . . )� Tient la charge : dupliquer l'exécution des scripts� Large gamme de choix du langage de programmation

2. Inconvénients� Invocation des scripts par le serveur� Di�culté à programmer (+/-)

On ne ra�ne pas trop le modèle de couches avec l'adaptateur de données qui est parfoisintroduit, pour ne pas trop complexi�erLes programmes sont appelés scripts sur le diagramme, car les langages de scripts (PHP, Perl,Python, etc.) furent très populaire dans l'essor de cette technologie de pages Web dynamiques.Des programmes dans un langage compilé sont aussi possibles (Java par ex.) sans que celachange le modèle.Di�érentes techniques d'invocation des programmes par les serveurs Webs (qui étaient initia-lement dédiés aux pages statiques) ont vu le jour, comme CGI.Un souci général est les performances pour des consultations simultanées, sachant que toutn'est pas complètement dynamique dans une page Web, mais que si tout est regénéré à chaqueconsultation, le serveur peut vite s'écrouler. L'e�cacité du mécanisme de déclencement del'exécution du bon programme, et de récupération du contenu des pages généré est critique.A�n d'optimiser les performances, di�érentes générations de technologies ont émergé, qu'onverra plus loin.

Poly étudiant 4

Page 6: Architecture(s) et application(s) WebApplication Symfony ToDo , en ligne de commande : présentation a chage sortie standard ... (par exemple en PHP) fonctionnent sur / derrière

CSC4101 2018-2019 CM 2

2.6 Architecture moderne, multi-couches

On distingue les di�érents composants mis en ÷uvre dans une application, en di�érentes couchesindépendantes.

Chaque couche s'appuie sur la couche de droite, les �èches illustrant le �ux de donnéesOn décrit cette architecture en parlant aussi d'architecture multi-tier ou n-tier.Par rapport au schéma de l'architecture 3 tiers précédente, on a distingué notamment la � lo-gique de présentation � de façon indépendante, en la plaçant côté serveur.Ici, cela correspond à une déclinaison des technologies de construction de pages Web où l'intelli-gence est principalement gérée par les programmes fonctionnant du côté du serveur, ce qui serale cas dans les applications que nous étudierons dans ce cours, construites avec le frameworkSymfony.Mais on peut trouver d'autres architectures, notamment avec des frameworks Web apparusplus récemment, où le serveur est très peu concerné par la présentation. La logique de présen-tation s'exécute alors principalement dans des programmes tournant du côté du client Web, ens'appuyant sur les technologies du monde JavaScript.

2.6.1 Caractéristiques

� Découpage en couches� Mieux décomposer l'architecture de l'application côté serveur pour mieux maîtriser le développe-

ment� Découpler par exemple :

� la logique métier (pas nécessairement Web)� la présentation (sous forme de pages Web)

� Modèle qui peut être ra�né en ajoutant d'autres couches

Cette approche d'architecture multi-couche n'est pas réservée aux applications Web, mais s'ap-plique à d'autres types d'applications.L'important est la modularisation, le découplage, qui facilite la maintenance, notamment l'évo-lutivité.Un autre avantage consiste aussi à permettre de mieux gérer certains problèmes de perfor-mances, en scindant les composants d'une couche sur plusieurs exécutions en parallèle, ce quimultiplie les capacités de traitement (pourvu que la cohérence n'en sou�re pas, ce qui n'estpas toujours possible).

2.7 Évolutions récentes

Rôle accru du client� utilisation de JavaScript avec framework (Angular. . . )� programmation événementielle sur le client� page modi�ée côté client (DOM)

Poly étudiant 5

Page 7: Architecture(s) et application(s) WebApplication Symfony ToDo , en ligne de commande : présentation a chage sortie standard ... (par exemple en PHP) fonctionnent sur / derrière

CSC4101 2018-2019 CM 2

� micro services côté serveur (API)

On abordera la programmation côté client en Javascript dans une séance ultérieure.Ces aspects seront approfondis dans l'UV d'ouverture � Initiation à Javascript et à la program-mation d'applications web � (CSC 4531).

3 HTTP

L'objectif de cette section est de comprendre le fonctionnement du protocole de communicationentre clients et serveurs Web, HTTP (HyperText Transfer Protocol).On a déja abordé les grandes lignes du fonctionnement client-serveur du protocole dans laséance de cours magistral précédente, mais on va approfondir ici la structure des échanges etle rôle des di�érents éléments.

3.1 Principes requêtes et réponses

3.1.1 Architecture Client-Serveur

HTTP (HyperText Transfer Protocol)

� Multiples clients simultanés� Serveur sans � connaissance � particulière des clients� Réseau internet TCP/IP

3.1.2 Construction de la requête par le client

1. Le client (navigateur) interprète l'URL

2. Il demande au service de nom une adresse IP corrrespondant au nom du site (www.monsite.fr)

3. Il établit une connexion TCP avec le serveur à cette adresse, sur le numéro de port associé auprotocole : 80 pour HTTP (ou 443 pour HTTPS, . . . )

4. Il formule sa requête d'action (par exemple via laméthode GET) sur une ressource (/projet/doc.html),en écrivant un message :ex. : � GET /projet/doc.html �

Et, depuis HTTP 1.1 il indique au serveur qu'il souhaite parler au site en question avec l'en-têteHost, pour le cas où plusieurs sites Web seraient gérés par le même serveur qui écoute sur cetteadresse IP.Cf. Rappel : Services sur Internet (TCP/IP) en annexes pour plus de détails sur les aspectsliés au réseau.

3.1.3 Traitement de la requête par le Serveur

1. Analyse la requête reçue (GET /projet/doc.html)

2. Véri�cation validité, autorisations d'accès. . .

3. Envoi d'une réponse au client avec :� un code de retour� contenu (document ou résultat exécution)ou :� message d'erreur, ou une demande authenti�cation, ou adresse de redirection

4. Fermeture de la connexion

Poly étudiant 6

Page 8: Architecture(s) et application(s) WebApplication Symfony ToDo , en ligne de commande : présentation a chage sortie standard ... (par exemple en PHP) fonctionnent sur / derrière

CSC4101 2018-2019 CM 2

3.1.4 Requête - Réponse

3.1.5 Contenu des messages

On verra plus loin le détail de ce qui circule dans les messages de requêtes et de réponses.

3.1.6 Production du contenu sur le serveur

� chemin d'accès à la ressource reçu : identi�e la ressource demandée (� /projet/doc.html �) ;� En fonction du contexte de la requête, pour la même URL, le serveur peut renvoyer di�érentes

représentations de cette ressource, di�érents contenus/formats ;� La façon dont le serveur fabrique le contenu renvoyé lui appartient : le client ne peut rien

supposer, juste suivre les liens hypertextes.� Arborescence de chemins d'accès aux ressources accessibles (dans les URL) di�érente d'une

éventuelle arborescence de stockage e�ectif à l'intérieur du serveur.� Peut-être envoi d'un document stocké sur un système de �chier ?� Peut-être une application générant des documents dynamiquement ?- . . .

Choix du serveur arbitraire en fonction du contexte de la requête.

Le contexte pris en compte par le serveur dépend uniquement de la méthode HTTP, de l'URLaccédée et des en-têtes présents dans la requête du client, mais pas des requêtes précédentesde ce même client (protocole sans état)Le serveur Web va faire un certain nombre de choix qui dépendent de la façon dont il estcon�guré, avec des règles à appliquer relativement élaborées.On ne couvre pas ces aspects de con�guration dans le présent cours.

3.1.7 Transmettre des données au serveur

� Comment le client peut-il transmettre des données au serveur : contexte explicite pour lesapplications dynamiques ?

� L'URL peut contenir des informations variables :� des arguments d'un GET

http://www.monsite.fr/projet/service.php?id=3&nb=42

nom valeurid 3nb 42

� Le corps de la requête peut transmettre des données : ex. méthode POST (voir ci-après)

Poly étudiant 7

Page 9: Architecture(s) et application(s) WebApplication Symfony ToDo , en ligne de commande : présentation a chage sortie standard ... (par exemple en PHP) fonctionnent sur / derrière

CSC4101 2018-2019 CM 2

Le séparateur ? est un mot-clé particulier dans le format des URL. Le caractère & permet deséparer les couples clé-valeur des di�érents arguments transmis dans l'URL.Le contenu de la requête POST permet de transmettre des données plus riches et plus volumi-neuses.

3.1.8 Protocole sans état (stateless)

� Chaque requête est e�ectuée de façon indépendante, et le serveur ne garde pas la trace desrequêtes précédentes e�ectuées par le même client.

� De base, pas de gestion de session dans HTTP (mais des solutions existent).

On reverra ce mécanisme de session ultérieurement dans le cours.

3.2 Spéci�cations de base HTTP

Les spéci�cations de HTTP sont riches et très détaillées, et compréhensibles, et ont évoluépendant les 25 ans d'existence du protocole.On en donne ici une présentation résumée et partielle, basée sur HTTP/1.1.

3.2.1 Format des messages HTTP

� Très peu de types de requêtes / méthodes (moins d'une dizaine)� Tout en texte ASCII 7 bits (facile à débugger)� Syntaxe très simple, avec 4 zones

1. ligne 1 : requête (ou statut réponse)

2. plusieurs lignes : en-têtes (optionnels)

3. ligne vide : séparateur (obligatoire)

4. reste du message : corps/contenu (qui peut être vide)

Les en-têtes sont au format RFC 822, déjà popularisé pour l'email. Pour transporter autre-choseque de l'ASCII (binaire, accents, etc.) il faudra encoder / décoder le contenu.

3.2.2 Structure d'une requête client

� Canevas :Méthode Document Version_HTTP

En-têtes

(Ligne vide)

Contenu du Message optionnel

...(saisie d'un formulaire, document à publier)...

La ligne vide est importante (�n des en-têtes)� Exemple :

1 GET /hello.txt HTTP/1.1

2 User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3

3 Host: www.example.com

4 Accept-Language: en, mi

5

6

Les lignes depuis la deuxième jusqu'au séparateur sont les en-têtes. Ici, les lignes 2 à 4, donc 3en-têtes User-Agent, Host et Accept-Language.

3.2.3 Structure d'une réponse serveur

� Canevas :

Poly étudiant 8

Page 10: Architecture(s) et application(s) WebApplication Symfony ToDo , en ligne de commande : présentation a chage sortie standard ... (par exemple en PHP) fonctionnent sur / derrière

CSC4101 2018-2019 CM 2

Version_HTTP Code Signification

En-têtes

(Ligne vide)

Contenu du Message

...(document HTML, image, ...)...

� Exemple :1 HTTP/1.1 200 OK

2 Date: Mon, 27 Jul 2009 12:28:53 GMT

3 Server: Apache

4 Content-Length: 72

5 Content-Type: text/plain

6

7 Salut tout le monde. Mon contenu contient un retour charriot à la fin.

8

Le contenu du message (ce qui suit la ligne vide) est particulièrement important, mais devraêtre interprété par le client qui le reçoit en fonction des en-têtes.Comme il s'agit en général d'autre chose qu'un texte simple en ASCII, les en-têtes relatifs auxformats et méthodes d'encodage sont particulièrement importants.Le corps/contenu du message, c'est à dire les données, est appelé payload en anglais.

3.3 Méthodes

Le client parle au serveur à travers une des méthodes correspondant à un ensemble d'actionsqu'il souhaite e�ectuer sur les ressources du serveur.

3.3.1 Actions sur les ressources (CRUD)

� Le client souhaite e�ectuer des actions/opérations sur les ressources du serveur� Il invoque di�érents types de requêtes, méthodes :

Opération Méthode HTTP SQLC Create (création) PUT / POST INSERTR Read (accès) GET SELECTU Update (m-à-j) PUT / PATCH UPDATED Delete (suppr.) DELETE DELETE

cf. RFC7231 : HTTP/1.1 Semantics and Content

3.3.2 Exemple de requête GET

� Demande du document premier.html par le navigateur (�refox)Regardez les en-têtes dans les outils pour le développeur de vos navigateurs

3.3.3 Exemple de réponse à un GET

� Envoi du document HTML par le serveur Web ApacheLa première ligne contient le code de statut/retour : 200 OK

3.3.4 Méthode GET

Récupérer la représentation d'une ressource� Seule méthode à l'origine

⇒ usage très simple : GET doc.html

� Méthode la plus utilisée qui permet de :� Récupérer le contenu d'un document (�chier, image. . . )� Activer l'exécution d'un programme sur le serveur� Et même envoyer des données programme?nom=paul

� Avec GET, le contenu du message dans la requête est toujours vide

Poly étudiant 9

Page 11: Architecture(s) et application(s) WebApplication Symfony ToDo , en ligne de commande : présentation a chage sortie standard ... (par exemple en PHP) fonctionnent sur / derrière

CSC4101 2018-2019 CM 2

3.3.5 Autres méthodes

� HEAD : comme GET, mais récupérer seulement l'en-tête� POST : envoi de données pour traitement côté serveur (ex : contenu d'un formulaire HTML)� PUT : envoi du contenu d'un document, pour enregistrement sur le serveur� DELETE : suppression d'un document� CONNECT : établir un tunnel vers le serveur hébergeant une ressource (serveur proxy)� OPTIONS : demande des options gérées par le serveur pour l'accès à une ressource� TRACE : e�ectue un test d'accès complet le long du chemin d'accès à une ressource (ping / echo)

Pour une liste plus complète de toutes les méthodes des requêtes HTTP, consultez http:

//webconcepts.info/concepts/http-method/

3.3.6 Keep Calm

En pratique, au-delà de cette séance, vous utiliserez et gérerez principalement :� GET

� POST

L'a�aire se corsera pour ceux qui s'intéresseront aux services Web fonctionnant avec des API surHTTP (REST)

3.3.7 Codes de réponse du serveur

De 100 à 199 Messages d'information

De 200 à 299 Succès. Exemple : 200 Okay

De 300 à 399 Redirections

De 400 à 499 Erreurs du client. Ex. : 404 Not Found

De 500 à 599 Erreurs du serveur. Ex. : 501 Internal Server Error

En anglais Status codes.Code numérique, complété par un message littéralAussi, 418 /I'm a teapot/ . . .Cf. http://webconcepts.info/concepts/http-status-code/ pour une liste exhaustive

3.4 En-têtes sans mal de tête

Il existe de très nombreux en-têtes, de requêtes ou de réponses, qui complètent le contexte desdemandes ou réponses.Nous n'en présentons que certains, qui sont importants pour la compréhension générale duprotocole et la mise au point des applications.

3.4.1 Rôle des en-têtes (headers)

� Ajoute du contexte (propriétés du client, autorisations . . . )� Détaille les caractéristiques des �ux (encodage, taille . . . )� Optimisations (cache, . . . )� Gestion d'une session au-dessus d'un protocole sans état (cookies, . . . )� Éléments propres à l'application (extensible)

Il y a beaucoup d'en-têtes, mais seulement certains d'entre-eux sont réellement importantsdans le cadre de ce cours (en gras)

3.4.2 En-têtes généraux

Aussi bien dans requêtes ou réponses

Les caches et proxy Cache-Control, Pragma, Via

La connexion Connection

Poly étudiant 10

Page 12: Architecture(s) et application(s) WebApplication Symfony ToDo , en ligne de commande : présentation a chage sortie standard ... (par exemple en PHP) fonctionnent sur / derrière

CSC4101 2018-2019 CM 2

La date Date

Le codage MIME-Version, Transfer-Encoding

Les en-têtes généraux peuvent être présents aussi-bien dans les requêtes que dans les réponsesHTTP.

3.4.3 En-têtes de requêtes

� Préférences du client : types, caractères, langage. . .� Accept

� Accept-Encoding

� Accept-Charset

� Accept-Language

� Identi�cation du client/serveur : site, e-mail, source. . .� Host

� From

� Referer

� User-Agent

Ces en-têtes sont dé�nis par le client qui les ajoute à partir de la 2e ligne du message de requête

Accept dé�nit les priorités sur le format des données que le client aimerait recevoir de lapart du serveur

Host précise au serveur sur quel site exactement les chemins d'URL sont spéci�és (quandplusieurs sites sont hébergés sur la même adresse IP)

3.4.4 En-têtes de requêtes (suite)

� Contrôle d'accès et sessions (login, cookies. . . )� Authorization

� Cookie

� Conditions pour le serveur (sur la date. . . )� If-Modified-Since

� If-Match

� If-Range

� If-Unmodified-Since

� Autres (pour proxy)� Max-Forwards

Authorization permet de transmettre au serveur des lettres de créance pour se faireconnaître (cf. séance ultérieure)

Cookie permet de transmettre (plus ou moins automatiquement) des données au serveur àchaque visite (requête GET). On verra que ça permet notamment de gérer des sessionsdans les applications.

3.4.5 En-têtes de réponses

� Informations sur le contenu : type, taille, URL, encodage. . .� Content-Type

� Content-Length

� Content-Encoding

� Content-Location

� Informations sur la date de modi�cation ou la durée� Last-Modified

� Expires

Poly étudiant 11

Page 13: Architecture(s) et application(s) WebApplication Symfony ToDo , en ligne de commande : présentation a chage sortie standard ... (par exemple en PHP) fonctionnent sur / derrière

CSC4101 2018-2019 CM 2

Ces en-têtes précisent notamment des informations (méta-données) relatives au contenu qui vaêtre transmis par le serveur dans la suite de la réponse.

Content-Type précise le format de �chier qui sera présent dans les données

3.4.6 En-têtes de réponses (suite)

� Identi�cation du serveur : nom, formats. . .� Server

� Accept-Range

� Location

� Compléments pour le client : durée, âge. . .� Age

� Retry-After

� Warning

� Autres :� Allow : méthodes autorisées

� Etag : entité de balisage

Location est notamment utilisé en cas de redirection (code de statut 300 et +) pourindiquer la cible de la redirection

3.4.7 En-têtes de réponses (suite)

� Demande d'authenti�cation� WWW-Authenticate

� Envoi de cookies� Set-Cookie

WWW-Authenticate complémentaire au code de retour indiquant que le contenu demandéest protégé (401 Unauthorized) et indique au client qu'il doit s'authenti�er (sera vudans une séance ultérieure)

Set-Cookie permet au serveur de transmettre au client des données à conserver dans lescookies associés à cette URL (cf. plus loin).

4 Fonctionnement des serveurs Web

L'objectif de cette section est de présenter ce qui se produit du côté des serveurs HTTP, et enparticulier la façon dont des programmes sont appelés en réponse aux requêtes HTTP.

4.1 Serveur HTTP

1. Comprendre les requêtes HTTP des clients� URL (http(s)://example.com/hello)� Verbe/méthode/action (GET, POST, . . . )� En-têtes� Données transmises

2. Construire la réponse� Servir des documents� Ou exécuter des programmes

3. Renvoyer une réponse au client (HTML, etc.)

On ne détaillera pas ici la façon dont le serveur Web sert des données statiques depuis desdocuments, mais on se concentrera plutôt sur l'invocation des programmes, qui vont fairefonctionner les applications Web.

Poly étudiant 12

Page 14: Architecture(s) et application(s) WebApplication Symfony ToDo , en ligne de commande : présentation a chage sortie standard ... (par exemple en PHP) fonctionnent sur / derrière

CSC4101 2018-2019 CM 2

4.1.1 Mais aussi

� Véri�er la sécurité� Gérer les performances� . . .

4.1.2 Exemples

� Apache� Nginx� PaaS (Platform as a Service) prêt à l'emploi sur un Cloud

Dans le cours, on s'appuiera globalement sur le serveur fourni par php avec php -S y comprisquand utilisé via environnement de tests de Symfony.On n'abordera pas les détails de con�guration des serveurs Web comme Apache ou Nginx,faute de temps.

4.2 Programmes / Applications

� Exécution :� Directe sur le système d'exploitationou� Dans le contexte d'un serveur d'applications

� Un module du serveur Web� Un serveur d'application dédié

La di�érence entre ces deux modes d'exécution réside essentiellement dans la di�érence deperformances : communication entre deux programmes distincts, au niveau système (charge-ment d'un exécutable, pipes, etc.), ou via un mécanisme intégré : programme (interpréteur) etbiliothèques déjà chargés, gestion de multi-processus/threads intégrée, etc.

4.2.1 Invocation du programme

� Le serveur Web invoque l'exécution d'un programme� Le programme s'exécute sur une � plate-forme � : langage, bibliothèques, moteurs d'exécution, . . .� Le programme fournit une sortie au format HTML (en général) : transmise � telle-quelle �

Poly étudiant 13

Page 15: Architecture(s) et application(s) WebApplication Symfony ToDo , en ligne de commande : présentation a chage sortie standard ... (par exemple en PHP) fonctionnent sur / derrière

CSC4101 2018-2019 CM 2

La plate-forme a pour rôle de faciliter la communication avec le programme : passage des don-nées de la requête HTTP en entrées du programme, et transmission des sorties du programmevers une réponse HTTP.Là où des programmes classiques en ligne de commande utilisent arguments, variables d'envi-ronnement et entrée et sortie standard, un programme Web utilise des en-têtes, des cheminsde ressources, produit des codes de retour, du HTML, etc.On peut noter le lien qu'il y a avec le concept de �Platform as a Service � (PaaS) dans le mondeCloud : la plate-forme de développement et de déploiement est gérée de façon cohérente commeun tout intégré, disponible sur le Cloud. https://fr.wikipedia.org/wiki/Plate-forme_en_tant_que_service

Les plate-formes Cloud liées au développement d'applications ne sont pas détaillées dans lecadre de ce cours.

4.3 Technologies d'invocation d'un programme

� Di�érentes façons d'appeler un programme� Globalement la même façon même si di�érentes technologies possibles :

� CGI (Common Gateway Interface)� Exécution de programmes � au sein � du serveur HTTP� Serveur d'applications séparé

Di�érentes techniques ont existé, mais dans le cadre du cours nous allons nous concentrer surcelle utilisée dans le cas de PHP, qui hérite des concepts proches de l'exécution d'un programmepar le système d'exploitation via les CGI, pour des raisons historiques.

4.3.1 1. CGI (Common Gateway Interface)

� Requête sur une URL invoque une exécution d'un processus sur l'OS : shell script, exécutablecompilé, script (Perl, Python, . . . )

� Point d'entrée du programme unique : programmation impérative � classique �� Problèmes :

� lourdeur de l'invocation d'un nouveau processus système à chaque requête� gestion de session di�cile� sécurité : celle de l'OS

Obsolète

Exemple de problème de sécurité : les processus des programmes s'exécutent tous dans lecontexte du même utilisateur système, celui du serveur Web. Ainsi, une faille sur un des pro-grammes permettant d'avoir, par exemple, accès au système de �chier, donnera à l'attaquantla maîtrise de tous les autres programmes et leurs données. Même si les �chiers � système �du serveur sont à l'abri (le serveur Web ne tourne pas en tant que root), les dégats peuventquand même être conséquents.

4.3.2 2. Exécution de programmes � au sein � du serveur HTTP

� Le serveur HTTP � intègre � des fonctionnalités pour développer des applications (via des � plu-gins �) :� Langage de programmation � embarqué � (PHP, Python, . . . )� Gestion � native � de HTTP� Génération � facile � de HTML, etc.

� Exécution dans des threads dédiées (plus e�cace que des processus à invoquer)� Transfert des données immédiat : en mémoire, sans passer par l'OS

Ce type de technologies est toujours utilisé même s'il n'est pas idéal notamment en terme desouplesse pour le déploiement, pour la gestion avancée des performances ou de la sécurité.Historiquement, pour PHP, on utilisait par exemple beaucoup mod_php qui est un plugin pourApache, qui rendait l'interpréteur PHP et ses bibliothèques accessibles en direct.

Poly étudiant 14

Page 16: Architecture(s) et application(s) WebApplication Symfony ToDo , en ligne de commande : présentation a chage sortie standard ... (par exemple en PHP) fonctionnent sur / derrière

CSC4101 2018-2019 CM 2

4.3.3 3. Serveur d'applications séparé

� Architecture un peu di�érente� Le serveur Web gère la charge HTTP et fournit des documents statiques (CSS, images, etc.)� Un (ou plusieurs) serveur(s) d'applications gère(nt) l'exécution des réponses dynamiques aux re-

quêtes� Le serveur HTTP et les serveurs d'application sont connectés de façon e�cace (si possible)� Le serveur d'application gère des sessions� On peut gérer de façon indépendante la partie statique et la partie dynamique, notamment pour

s'adapter à la charge plus ou moins dynamiquement.

Aujourd'hui, dans le monde PHP, avec PHP-FPM, qui devient très répandu, on se rapprocheun peu plus de ce modèle : serveur Web + serveur d'exécution PHP bien distincts (Apache +PHP-FPM ou NginX + PHP-FPM).PHP-FPM implémente l'API FastGCI pour la communication entre le serveur Web et le serveurd'applications.

4.4 Exemple : programmes Web en PHP

� Bibliothèques pour spéci�cités HTTP� Facile à tester ( ?)� Très populaire pour déploiement chez des hébergeurs� Très permissif sur le style de programmation� Conserve des mécanismes très proches de la façon d'écrire les programmes en scripts CGI� Serveur d'exécution PHP dédié (PHP-FPM)

C'est le langage qu'on va utiliser dans ce cours.On utilisera la plate-forme PHP fortement en TPs et Hors-Présentiel, mais pas le serveurd'applications PHP-FPM.On utilisera par contre l'environnement de développement et de mise au point fourni par leframework Symfony, qui permet un mode de fonctionnement un peu di�érent pour tester desprogrammes PHP. Ce ne sera pas un serveur Web qui invoquera des programmes PHP, mais onutilisera l'interpréteur PHP pour qu'il fasse fonctionner un serveur HTTP basique en amontdes programmes. Cela renverse un peu la logique : c'est l'interpréteur PHP qui démarre unserveur Web, et non l'inverse.Par contre, en environnement de production, une fois l'application développée et déployée,Symfony s'exécuterait derrière PHP-FPM, de façon standard.

4.5 Invocation des programmes PHP

4.5.1 Contexte d'invocation

� Données transmises au serveur Web via la requête HTTP

URL Arguments (URL-encoded)

En-têtes Cookies

Données contenu (payload) de la requête (ex. données de formulaires pour un POST)

� Le choix du programme à invoquer est déterminé par une combinaison d'éléments (a minima viale chemin dans l'URL)� La con�guration du serveur détermine les règles à appliquer

� Le serveur Web peut �ltrer les données reçues dans la requête� Il invoque un � processus � ou l'exécution d'une fonction sur l'API d'un module� Il transmet les données au programme

� arguments d'un processus (CGI)� variables d'environnement (CGI)� paramètres des fonctions des APIs, ou variables du langage de programmation (module intégré)

Poly étudiant 15

Page 17: Architecture(s) et application(s) WebApplication Symfony ToDo , en ligne de commande : présentation a chage sortie standard ... (par exemple en PHP) fonctionnent sur / derrière

CSC4101 2018-2019 CM 2

Quels que soient le langage ou la plate-forme, on en revient aux données transmises au serveurvia HTTP qui sont en général accessibles de façon plus ou moins facile à récupérer, via lesoutils du langage ou les bibliothèques.Par exemple, en parcourant un tableau contenant des variables globales du programme (hé-ritage historique de l'utilisation de variables d'environnement Unix (getenv) au temps desCGI).

4.5.2 Résultats d'exécution

� Résultat d'un programme (POSIX)� Code de retour système (exécution d'un processus) :

� 0 ou != 0

� Sortie standard du programme� Erreur standard ?

� Conversion en réponse HTTP� Code de retour -> Code de statut

0 ⇒ 200

!= 0 ⇒ 5xx� Sorties

� Standard (stdout) telle-quelle dans réponse HTTP : attention au format� Headers : succès, échecs, redirections, . . .

� Cookies : sessions� Ligne vide� Contenu du document :

� HTML� Autres formats (APIs : JSON, . . . )

� Erreur standard (stderr) : dans les logs du serveur ?

La plate-forme du langage peut intégrer la gestion de la génération de la réponse, sous formede code de statut HTTP et de messages.Pour mémoire, on a vu précédemment le format attendu pour les réponses HTTP, que la sortiestandard doit donc respecter.Attention donc à la façon dont est générée la sortie du programme. Si on mélange l'a�chagedes en-têtes et du message sans respecter le format attendu, les en-têtes seront ignorés par leclient HTTP. C'est particulièrement sensible si on a�che des traces de mise au point avec desprint sur la sortie standard, qui risquent d'être ignorés par le client HTTP, s'ils apparaissentdans les en-têtes.Le PHP � basique � pose un certain nombre de problèmes de ce type pour les programmeurs,qui seront résolus avec un framework comme Symfony.

4.6 Serveur HTTP intégré à PHP

� Invocation serveur HTTP intégré à PHP :php -S localhost:8000 -t public/

� Toutes les requêtes sont traitées par l'exécution d'un script PHP arbitraire présent dans public/ou par défaut public/index.php :

URL Programme Argshttp://localhost:8000/test.php public/test.php

http://localhost:8000/test.php?hello public/test.php hello

http://localhost:8000/ public/index.php

http://localhost:8000/hello public/index.php hello

http://localhost:8000/index.php?hello public/index.php hello

Poly étudiant 16

Page 18: Architecture(s) et application(s) WebApplication Symfony ToDo , en ligne de commande : présentation a chage sortie standard ... (par exemple en PHP) fonctionnent sur / derrière

CSC4101 2018-2019 CM 2

Le programme à invoquer est cherché dans le répertoire racine du serveur Web (l'argument del'option -t, donc ici public/).Si un programme PHP portant le même nom que le chemin d'accès à la ressource demandéeexiste, il est invoqué, comme pour test.php dans l'exemple.Sinon, par défaut on invoque index.php (s'il existe. . . sinon, erreur). On lui passe alors éven-tuellement en argument le chemin d'accès à la ressource (hello).Nous reverrons par la suite ce qui se produit dans ces programmes PHP.

4.7 Application PHP Symfony

� Invocation de méthodes dans une classe pour gérer des chemins d'accès à des ressources.� Le programmeur n'écrit pas le point d'entrée index.php� Le framework fournit un composant o�rant des fonctions de routage : décodage du contexte

HTTP pour invoquer la bonne méthode de la bonne classe� Le programmeur n'a plus qu'à écrire une classe PHP : programmation événementielle dans

un contexte objet

Pour le développeur PHP, on concoit l'application dans un style de programmation événemen-tielle et orientée objet de façon similaire, pour une application Web/HTTP, à ce qu'on pourraitfaire pour une application type GUI sur le bureau, ou sur mobile.On utilise des mécanismes objet, comme les exceptions, par exemple, pour gérer les erreurs. Leframework les convertit en codes de retour HTTP de façon transparente pour le développeur.Avec Symfony, on pense objet, et on béné�cie des apports du génie logiciel avec des bonnespratiques de qualité logicielle, indépendamment du fait qu'on programme en PHP pour le Web.

5 Take away

� client HTTP� serveur HTTP� modèle de couches (3 et +)

� présentation� traitement� accès aux données

� format des requêtes / réponses dans HTTP� requêtes GET, POST, . . .� status codes : 200, 40x, . . .� invocation des programmes qui génèrent du HTML

6 Ensuite. . .

6.1 Tout de suite, séance TP n°2

� HTTP� Test d'exécution d'une application Web � �l-rouge � en PHP, s'exécutant en local

6.2 Hors-présentiel d'ici au prochain cours

3 h à caser dans la semaine

6.3 Choix des binômes pour prochaine séance de TP pour début du projet

� binôme dans le même groupe� ne changera pas par la suite

Poly étudiant 17

Page 19: Architecture(s) et application(s) WebApplication Symfony ToDo , en ligne de commande : présentation a chage sortie standard ... (par exemple en PHP) fonctionnent sur / derrière

CSC4101 2018-2019 CM 2

6.4 Q / R

7 Annexes

7.1 Rappel : Services sur Internet (TCP/IP)

� Un service sur Internet est caractérisé par :� une application TCP/IP� un protocole� un numéro de port

� Fonctionnement en mode Client/Serveur au dessus des couches réseau (IP, TCP ou UDP, . . . )� Ports qui nous intéressent :

� 80 par défaut (HTTP)� 443 par défaut (HTTPS)� 8000, par exemple si serveur con�guré pour écouter sur ce port

Le Web n'est qu'une application parmi d'autres : ne pas confondre Internet et le WebServices nombreux et variés.Dans ce cours, on suppose une connaissance de base de TCP/IP et des réseaux.

7.1.1 Rappel : adresses IP

� Les URLs peuvent contenir l'adresse IP (v4 ou v6) du serveur. Ex. : http://192.168.0.1/index.html� Le serveur doit être lancé et écouter sur cette même IP� Attention aux problèmes de routage des paquets (�rewall, NAT, . . . )

� Dans les TPs on utilisera souvent localhost : 127.0.0.1 (en IPv4), car dans l'environnement dedéveloppement Symfony, client et serveur sont sur la même machine.

En TP on se connectera à un serveur Web tournant en local, démarré depuis l'environnementde test de Symfony, donc tout se fait sur http://localhost:8000/Pour tester � comme en vrai �, ça peut devenir un peu plus compliqué au niveau réseau, selonla con�guration de l'OS. Mais ceci dépasse le cadre du présent cours.Le serveur peut connaître l'adresse apparente d'un client, mais ne peut pas toujours en fairequelque chose (proxy, NAT, etc.). Dans HTTP, le serveur n'en tient en général pas comptepour déterminer son comportement.

7.2 Évolution des spéci�cations de HTTP

7.2.1 Spéci�cations (version de juin 2014) :

� RFC 7230 HTTP/1.1 : Message Syntax and Routing� RFC 7231 HTTP/1.1 : Semantics and Content� RFC 7232 HTTP/1.1 : Conditional Requests� RFC 7233 HTTP/1.1 : Range Requests� RFC 7234 HTTP/1.1 : Caching� RFC 7235 HTTP/1.1 : Authentication

Les RFC (Request For Comments) peuvent avoir valeur de standard de l'Internet (cf. https://fr.wikipedia.org/wiki/Request_for_comments).Les spéci�cations d'HTTP ont été réécrites récemment, même si HTTP 1.1 est très vieux.

7.2.2 Versions HTTP historiques

� Version d'origine, notée HTTP 0.9 (1991)� Une seule méthode : GET� Pas d'en-têtes� Chaque requête = une connexion TCP

� HTTP version 1.0 (1996)� Introduction des en-têtes ==> échange de � méta � informations� Nouvelles possibilités :

� utilisation de caches

Poly étudiant 18

Page 20: Architecture(s) et application(s) WebApplication Symfony ToDo , en ligne de commande : présentation a chage sortie standard ... (par exemple en PHP) fonctionnent sur / derrière

CSC4101 2018-2019 CM 2

� authenti�cation� connexion persistante

� Ajout de méthodes : HEAD, POST. . .

7.2.3 HTTP version 1.1 (1997 - )

� Mode Connexions persistantes par défaut� Exemple : page d'accueil avec 5 images

� HTTP 0.9 ==> 6 connexions/déconnexions TCP� HTTP 1.1 ==> 1 SEULE connexion TCP

� Possibilité de transférer des séries d'octets� Introduction du � multihoming � càd possibilité de gérer plusieurs noms de sites par un serveur

Bien que la version 1.1 soit assez ancienne, c'est aujourd'hui encore la version principalementutilisée sur le Web, donc celle avec laquelle vous allez travailler dans ce cours.

7.2.4 HTTP version 2 (2015)

� Tout nouveau� Performances (binaire, compression, 1 seule connexion,. . . )Spécs : Hypertext Transfer Protocol Version 2 (HTTP/2) RFC 7540

Pas forcément encore très di�usé sur le Web.Pas utilisé dans le cadre de ce cours.

7.3 HTTP avancé

Notions avancées. Pas trop grave si tout ça n'est pas clair dès le départ.

7.3.1 Sécurité

� HTTP est en clair !� => Utiliser HTTPS� Mais attention : avoir con�ance dans le DNS, ou se �er aux certi�cats

On verra les aspects de sécurité plus en détail en séance ultérieure.

7.3.2 Contrôle d'accès

Sera vue en séance 4

7.3.3 Redirections

Exemple : http://www.example.com/ -> http://www.example.org/

curl http://www.example.com/

GET / HTTP/1.1

Host: www.example.com

User-Agent: curl/7.50.1

Accept: */*

HTTP/1.1 301 Moved Permanently

Location: http://www.example.org/

Content-Type: text/html

Content-Length: 174

<html>

<head>

Poly étudiant 19

Page 21: Architecture(s) et application(s) WebApplication Symfony ToDo , en ligne de commande : présentation a chage sortie standard ... (par exemple en PHP) fonctionnent sur / derrière

CSC4101 2018-2019 CM 2

<title>Moved</title>

</head>

<body>

<h1>Moved</h1>

<p>This page has moved to <a href="http://www.example.org/">http://www.example.org/</a>.</p>

</body>

</html>

Le navigateur Web n'a�chera pas ce contenu HTML : par défaut, il suivra le lien et recom-mencera un GET sur l'URL reçue dans l'en-tête LocationUtiliser curl -L permet de suivre les redirects.Par défaut les navigateurs e�ectuent les redirects, et les outils du développeur masquent parfoiscelà, sauf si on active une option permettant de garder l'historique des requêtes précédentes.

7.3.4 Proxy et cache

� Serveur Proxy : serveur HTTP intermédiaire� Diminuer le tra�c.

� Cache : stockage d'informations (statiques)� Le navigateur dispose d'un cache à deux niveaux : en mémoire pour l'historique et sur disque

entre les sessions.

� Exemple : 50 utilisateurs d'un site accèdent à une même page :� directement, elle sera transférée 50 fois� via un proxy, un seul transfert entre l'origine et le proxy

� Un proxy o�re aussi d'autres services (autres protocoles, contrôles. . . )Dans le cadre du cours, on n'explicite pas tous ces aspects. L'augmentation générale de la bandepassante et des applications dynamiques tend à rendre les proxies moins utiles, en général.

7.3.5 Ressources / Documents

� HTTP agit sur des ressources, qui ne sont pas forcément des documents stockés physiquement surle serveur.

� Pas uniquement du HTML (XML, JSON, RSS, HTML, PDF, JPG, CSS, JS, etc.).� Types MIME, encodage.� Négociation de contenu entre le client et le serveur� Web Sémantique

7.3.6 Content-Negociation

� Le résultat de la requête sur une même URL dépend des en-têtes de la requête.Accept: application/json, application/xml;q=0.9, text/html;q=0.8,

text/*;q=0.7, */*;q=0.5

Priorité Descriptionq=1.0 application/json

q=0.9 application/xml

q=0.8 text/html

q=0.7 text/* (ie. tout type de texte)q=0.5 */* (ie. n'importe quoi)

7.4 Outils HTTP du développeur Web

7.4.1 Moniteur réseau dans navigateur

Cf. démonstration du �moniteur réseau � dans les outils du développeur Web intégrés aux navigateurs.� Firefox� Chrome

Sera vu en partie TPMais aussi Poster pour Firefox et beaucoup d'autres outils

Poly étudiant 20

Page 22: Architecture(s) et application(s) WebApplication Symfony ToDo , en ligne de commande : présentation a chage sortie standard ... (par exemple en PHP) fonctionnent sur / derrière

CSC4101 2018-2019 CM 2

7.4.2 CURL en ligne de commande

https://curl.haxx.se/

Client en ligne de commande

man curl

On verra dans la partie TP comment s'en servir, par exemple avec curl -v 2>&1 | less

Aussi wget, ou get autres outils populaire en ligne de commande.

7.4.3 Tester la dispo, caches et archives

� http://www.downforeveryoneorjustme.com/

� Internet archive's Wayback Machine� Cache des moteurs de recherche

Copyright

Ce cours est la propriété de ses auteurs et de Télécom SudParis.Cependant, une partie des illustrations incluses est protégée par les droits de ses auteurs, etpas nécessairement librement di�usable.En conséquence, le contenu du présent polycopié est réservé à l'utilisation pour la formationinitiale à Télécom SudParis.Merci de contacter les auteurs pour tout besoin de réutilisation dans un autre contexte.

Poly étudiant 21