application(s) Web Architecture(s) et...architecture à plusieurs niveaux (multi tier) 5 Variante...

78
Architecture(s) et application(s) Web CSC4101 - HTTP et Architecture d'application Web 3 tiers 25/09/2018 1

Transcript of application(s) Web Architecture(s) et...architecture à plusieurs niveaux (multi tier) 5 Variante...

  • Architecture(s)etapplication(s)Web

    CSC4101-HTTPetArchitectured'applicationWeb3tiers

    25/09/20181

  • PlanducoursCM2:HTTPetarchitectureappliWeb3tiers

    2

  • 1. Architecture

    3

  • Quetrouve-t-onsouslecapotd’uneapplicationWeb?

    4

  • Architecture3tiersArchitecturelogicielle:

    couchedeprésentation;couchedetraitement;couched’accèsauxdonnées.

    Simplificationdel’approchegénéraled’unearchitectureàplusieursniveaux(multitier)

    5

  • VariantelignedecommandeApplicationSymfonyToDo,enlignedecommande:

    présentationaffichagesortiestandard

    traitementApp\Command\ListTodosCommand

    accèsauxdonnéesDoctrine+SQLite

    6

  • VariantesurleWeb

    7

  • 3couchesdesapplicationsWebDéploiementsurleWebdesdifférentescouches:

    Présentation:pagesHTMLtransmisesvialeréseau:serveurquilesconstruitclient(navigateur)quilesaffiche

    Traitements:programmes:serveurWeb(dialogueHTTP,invocationdesapplications)serveurd’applications(exécutedesprogrammesPHP,parexemple)

    AccèsauxdonnéesSGBD

    8

  • Évolutiondesarchitectures

    9

  • ServeurdepagesWebstatiquesHistoriquement,lespremiersserveursWebsecontententdefournirdespagesWebstatiqueschargéesdepuisdesfichiers(documentsHTML).

    10

  • Caractéristiquesd’unserveurdepagesstatiques

    AvantagesEfficace(tientlacharge)

    InconvénientsNepermetpasfacilementdespagesquisemettentàjourdynamiquement,enfonctiondesvisitesEncoremoinsdesapplicationsinteractivesProblèmedecohérencedesURLs(renommages,lienscassés,etc.)

    11

  • ApplicationsBD+WebLesserveursserventàfairetournerdesapplicationsproduisantdespagesWebdynamiques,àpartirde

    donnéesissuesdebasesdedonnées.

    12

  • Caractéristiquesd’unserveurpourapplicationsBD+Web

    Aged’orduWeb:desapplicationssontpossibles:desprogrammesgénèrentdespagesWebenfonctiondes

    requêtesduclient

    13

  • AvantagesBasededonnéesgèrel’intégritédesdonnées(transactions,accèsmultiples,intégritéréférentielle,…)Tientlacharge:dupliquerl’exécutiondesscriptsLargegammedechoixdulangagedeprogrammation

    14

  • InconvénientsInvocationdesscriptsparleserveur

    Difficultéàprogrammer(+/-)

    15

  • Architecturemoderne,multi-couchesOndistinguelesdifférentscomposantsmisenœuvre

    dansuneapplication,endifférentescouchesindépendantes.

    16

  • CaractéristiquesDécoupageencouchesMieuxdécomposerl’architecturedel’applicationcôtéserveurpourmieuxmaîtriserledéveloppementDécouplerparexemple:

    lalogiquemétier(pasnécessairementWeb)laprésentation(sousformedepagesWeb)

    Modèlequipeutêtreraffinéenajoutantd’autrescouches

    17

  • ÉvolutionsrécentesRôleaccruduclient

    utilisationdeJavaScriptavecframework(Angular…)programmationévénementiellesurleclientpagemodifiéecôtéclient(DOM)microservicescôtéserveur(API)

    18

  • 2. HTTP

    19

  • Principesrequêtesetréponses

    20

  • ArchitectureClient-ServeurHTTP(HyperTextTransferProtocol)

    MultiplesclientssimultanésServeursans«connaissance»particulièredesclientsRéseauinternetTCP/IP

    21

  • Constructiondelarequêteparleclient1. Leclient(navigateur)interprètel’URL2. IldemandeauservicedenomuneadresseIP

    corrrespondantaunomdusite(www.monsite.fr)3. IlétablituneconnexionTCPavecleserveuràcette

    adresse,surlenumérodeportassociéauprotocole:80pourHTTP(ou443pourHTTPS,…)

    4. Ilformulesarequêted’action(parexemplevialaméthodeGET)suruneressource(/projet/doc.html),enécrivantunmessage:ex.:«GET/projet/doc.html»

    22

  • TraitementdelarequêteparleServeur1. Analyselarequêtereçue(GET/projet/doc.html)2. Vérificationvalidité,autorisationsd’accès…

    3. Envoid’uneréponseauclientavec:

    uncodederetourcontenu(documentourésultatexécution)

    ou:

    messaged’erreur,ouunedemandeauthentification,ouadressederedirection

    4. Fermeturedelaconnexion

    23

  • Requête-Réponse

    24

  • Contenudesmessages

    25

  • Productionducontenusurleserveurchemind’accèsàlaressourcereçu:identifielaressourcedemandée(«/projet/doc.html»);Enfonctionducontextedelarequête,pourlamêmeURL,leserveurpeutrenvoyerdifférentesreprésentationsdecetteressource,différentscontenus/formats;Lafaçondontleserveurfabriquelecontenurenvoyéluiappartient:leclientnepeutriensupposer,justesuivreleslienshypertextes.

    26

  • Arborescencedecheminsd’accèsauxressourcesaccessibles(danslesURL)différented’uneéventuellearborescencedestockageeffectifàl’intérieurduserveur.

    Peut-êtreenvoid’undocumentstockésurunsystèmedefichier?Peut-êtreuneapplicationgénérantdesdocumentsdynamiquement?

    -…

    Choixduserveurarbitraireenfonctionducontextedelarequête.

    27

  • TransmettredesdonnéesauserveurCommentleclientpeut-iltransmettredesdonnéesauserveur:contexteexplicitepourlesapplicationsdynamiques?L’URLpeutcontenirdesinformationsvariables:

    desargumentsd’unGET

    nom valeur

    id 3

    nb 42

    Lecorpsdelarequêtepeuttransmettredesdonnées:ex.méthodePOST(voirci-après)

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

    28

  • Protocolesansétat(stateless)Chaquerequêteesteffectuéedefaçonindépendante,etleserveurnegardepaslatracedesrequêtesprécédenteseffectuéesparlemêmeclient.Debase,pasdegestiondesessiondansHTTP(maisdessolutionsexistent).

    29

  • SpécificationsdebaseHTTP

    30

  • FormatdesmessagesHTTPTrèspeudetypesderequêtes/méthodes(moinsd’unedizaine)ToutentexteASCII7bits(facileàdébugger)Syntaxetrèssimple,avec4zones1. ligne1:requête(oustatutréponse)2. plusieurslignes:en-têtes(optionnels)3. lignevide:séparateur(obligatoire)4. restedumessage:corps/contenu(quipeutêtre

    vide)

    31

  • Structured’unerequêteclientCanevas:

    Lalignevideestimportante(findesen-têtes)

    Exemple:

    MéthodeDocumentVersion_HTTPEn-têtes(Lignevide)ContenuduMessageoptionnel...(saisied'unformulaire,documentàpublier)...

    1:GET/hello.txtHTTP/1.12:User-Agent:curl/7.16.3libcurl/7.16.3OpenSSL/0.9.7lzlib/1.2.33:Host:www.example.com4:Accept-Language:en,mi5:6:

    32

  • Structured’uneréponseserveurCanevas:

    Exemple:

    Version_HTTPCodeSignificationEn-têtes(Lignevide)ContenuduMessage...(documentHTML,image,...)...

    1:HTTP/1.1200OK2:Date:Mon,27Jul200912:28:53GMT3:Server:Apache4:Content-Length:725:Content-Type:text/plain6:7:Saluttoutlemonde.Moncontenucontientunretourcharriotàlafin.8:

    33

  • Méthodes

    34

  • Actionssurlesressources(CRUD)Leclientsouhaiteeffectuerdesactions/opérationssurlesressourcesduserveurIlinvoquedifférentstypesderequêtes,méthodes:

    Opération MéthodeHTTP SQL

    C Create(création) PUT/POST INSERT

    R Read(accès) GET SELECT

    U Update(m-à-j) PUT/PATCH UPDATE

    D Delete(suppr.) DELETE DELETE

    cf.RFC7231:HTTP/1.1SemanticsandContent35

    https://tools.ietf.org/html/rfc7231

  • ExemplederequêteGETDemandedudocumentpremier.htmlparlenavigateur(firefox)

    Regardezlesen-têtesdanslesoutilspourledéveloppeurdevosnavigateurs

    GET/premier.htmlHTTP/1.1requêteConnection:Keep-Aliveen-têtes(début)User-Agent:Mozilla/5.0(Firefox/3.0.2)Host:telecom-sudparis.euAccept:image/gif,image/jpeg,*/*en-têtes(fin)lignevideicicontenuvide

    36

  • ExemplederéponseàunGETEnvoidudocumentHTMLparleserveurWebApache

    Lapremièrelignecontientlecodedestatut/retour:200OK

    HTTP/1.1200OKréponseDate:Mon,11Nov200817:47:24GMTen-têtes(début)Server:Apachee/2.2.3(DebianGNU/Linux)Perl/v5.8.4PHP/5.2.6Last-Modified:Wed,28Apr200815:55:02GMTContent-length:327Content-type:text/htmlen-têtes(fin)lignevidecontenu...documentHTML...

    37

  • MéthodeGETRécupérerlareprésentationd’uneressource

    Seuleméthodeàl’origine⇒usagetrèssimple:GETdoc.htmlMéthodelaplusutiliséequipermetde:

    Récupérerlecontenud’undocument(fichier,image…)Activerl’exécutiond’unprogrammesurleserveurEtmêmeenvoyerdesdonnéesprogramme?nom=paul

    AvecGET,lecontenudumessagedanslarequêteesttoujoursvide

    38

  • AutresméthodesHEAD:commeGET,maisrécupérerseulementl’en-têtePOST:envoidedonnéespourtraitementcôtéserveur(ex:contenud’unformulaireHTML)PUT:envoiducontenud’undocument,pourenregistrementsurleserveurDELETE:suppressiond’undocument

    39

  • CONNECT:établiruntunnelversleserveurhébergeantuneressource(serveurproxy)OPTIONS:demandedesoptionsgéréesparleserveurpourl’accèsàuneressourceTRACE:effectueuntestd’accèscompletlelongduchemind’accèsàuneressource(ping/echo)

    40

  • KeepCalmEnpratique,au-delàdecetteséance,vousutiliserezet

    gérerezprincipalement:

    GETPOST

    L’affairesecorserapourceuxquis’intéresserontauxservicesWebfonctionnantavecdesAPIsurHTTP

    (REST)

    41

  • CodesderéponseduserveurDe100à199

    Messagesd’informationDe200à299

    Succès.Exemple:200OkayDe300à399

    RedirectionsDe400à499

    Erreursduclient.Ex.:404NotFoundDe500à599

    Erreursduserveur.Ex.:501InternalServerError

    42

  • En-têtessansmaldetête

    43

  • Rôledesen-têtes(headers)Ajouteducontexte(propriétésduclient,autorisations…)Détaillelescaractéristiquesdesflux(encodage,taille…)Optimisations(cache,…)Gestiond’unesessionau-dessusd’unprotocolesansétat(cookies,…)Élémentspropresàl’application(extensible)

    44

  • En-têtesgénérauxAussibiendansrequêtesouréponses

    LescachesetproxyCache-Control,Pragma,Via

    LaconnexionConnection

    LadateDate

    LecodageMIME-Version,Transfer-Encoding

    45

  • En-têtesderequêtesPréférencesduclient:types,caractères,langage…AcceptAccept-EncodingAccept-CharsetAccept-Language

    Identificationduclient/serveur:site,e-mail,source…HostFromRefererUser-Agent

    46

  • En-têtesderequêtes(suite)Contrôled’accèsetsessions(login,cookies…)AuthorizationCookie

    Conditionspourleserveur(surladate…)If-Modified-SinceIf-MatchIf-RangeIf-Unmodified-Since

    Autres(pourproxy)Max-Forwards

    47

  • En-têtesderéponsesInformationssurlecontenu:type,taille,URL,encodage…Content-TypeContent-LengthContent-EncodingContent-Location

    InformationssurladatedemodificationouladuréeLast-ModifiedExpires

    48

  • En-têtesderéponses(suite)Identificationduserveur:nom,formats…ServerAccept-RangeLocation

    Complémentspourleclient:durée,âge…AgeRetry-AfterWarningAutres:Allow:méthodesautoriséesEtag:entitédebalisage

    49

  • En-têtesderéponses(suite)Demanded’authentificationWWW-Authenticate

    EnvoidecookiesSet-Cookie

    50

  • 3. FonctionnementdesserveursWeb

    51

  • ServeurHTTP1. ComprendrelesrequêtesHTTPdesclients

    URL(http(s)://example.com/hello)Verbe/méthode/action(GET,POST,…)En-têtesDonnéestransmises

    2. ConstruirelaréponseServirdesdocumentsOuexécuterdesprogrammes

    3. Renvoyeruneréponseauclient(HTML,etc.)

    52

  • MaisaussiVérifierlasécuritéGérerlesperformances…

    53

  • Exemples

    PaaS(PlatformasaService)prêtàl’emploisurunCloud

    ApacheNginx

    54

    https://httpd.apache.org/https://nginx.org/

  • Programmes/ApplicationsExécution:

    Directesurlesystèmed’exploitation

    ou

    Danslecontexted’unserveurd’applicationsUnmoduleduserveurWebUnserveurd’applicationdédié

    55

  • InvocationduprogrammeLeserveurWebinvoquel’exécutiond’unprogrammeLeprogrammes’exécutesurune«plate-forme»:langage,bibliothèques,moteursd’exécution,…LeprogrammefournitunesortieauformatHTML(engénéral):transmise«telle-quelle»

    56

  • Technologiesd’invocationd’unprogramme

    Différentesfaçonsd’appelerunprogrammeGlobalementlamêmefaçonmêmesidifférentestechnologiespossibles:

    CGI(CommonGatewayInterface)Exécutiondeprogrammes«ausein»duserveurHTTPServeurd’applicationsséparé

    57

  • 1.CGI(CommonGatewayInterface)RequêtesuruneURLinvoqueuneexécutiond’unprocessussurl’OS:shellscript,exécutablecompilé,script(Perl,Python,…)Pointd’entréeduprogrammeunique:programmationimpérative«classique»Problèmes:lourdeurdel’invocationd’unnouveauprocessussystèmeàchaquerequêtegestiondesessiondifficilesécurité:celledel’OS

    Obsolète58

  • 2.Exécutiondeprogrammes«ausein»duserveurHTTP

    LeserveurHTTP«intègre»desfonctionnalitéspourdévelopperdesapplications(viades«plugins»):

    Langagedeprogrammation«embarqué»(PHP,Python,…)Gestion«native»deHTTPGénération«facile»deHTML,etc.

    Exécutiondansdesthreadsdédiées(plusefficacequedesprocessusàinvoquer)Transfertdesdonnéesimmédiat:enmémoire,sanspasserparl’OS

    59

  • 3.Serveurd’applicationsséparéArchitectureunpeudifférenteLeserveurWebgèrelachargeHTTPetfournitdesdocumentsstatiques(CSS,images,etc.)Un(ouplusieurs)serveur(s)d’applicationsgère(nt)l’exécutiondesréponsesdynamiquesauxrequêtesLeserveurHTTPetlesserveursd’applicationsontconnectésdefaçonefficace(sipossible)Leserveurd’applicationgèredessessionsOnpeutgérerdefaçonindépendantelapartiestatiqueetlapartiedynamique,notammentpours’adapteràlachargeplusoumoinsdynamiquement.

    60

  • Exemple:programmesWebenPHPBibliothèquespourspécificitésHTTPFacileàtester(?)TrèspopulairepourdéploiementchezdeshébergeursTrèspermissifsurlestyledeprogrammationConservedesmécanismestrèsprochesdelafaçond’écrirelesprogrammesenscriptsCGIServeurd’exécutionPHPdédié(PHP-FPM)

    61

  • InvocationdesprogrammesPHP

    62

  • Contexted’invocationDonnéestransmisesauserveurWebvialarequêteHTTPURL

    Arguments(URL-encoded)En-têtes

    CookiesDonnées

    contenu(payload)delarequête(ex.donnéesdeformulairespourunPOST)

    63

  • Lechoixduprogrammeàinvoquerestdéterminéparunecombinaisond’éléments(aminimavialechemindansl’URL)

    Laconfigurationduserveurdéterminelesrèglesàappliquer

    64

  • LeserveurWebpeutfiltrerlesdonnéesreçuesdanslarequêteIlinvoqueun«processus»oul’exécutiond’unefonctionsurl’APId’unmoduleIltransmetlesdonnéesauprogramme

    argumentsd’unprocessus(CGI)variablesd’environnement(CGI)paramètresdesfonctionsdesAPIs,ouvariablesdulangagedeprogrammation(moduleintégré)

    65

  • Résultatsd’exécutionRésultatd’unprogramme(POSIX)

    Codederetoursystème(exécutiond’unprocessus):0ou!=0

    SortiestandardduprogrammeErreurstandard?

    66

  • ConversionenréponseHTTP

    Codederetour->Codedestatut

    0 ⇒ 200!=0 ⇒ 5xx

    67

  • SortiesStandard(stdout)telle-quelledansréponseHTTP:attentionauformat

    Headers:succès,échecs,redirections,…Cookies:sessions

    LignevideContenududocument:

    HTMLAutresformats(APIs:JSON,…)

    Erreurstandard(stderr):dansleslogsduserveur?

    68

  • ServeurHTTPintégréàPHPInvocationserveurHTTPintégréàPHP:

    Touteslesrequêtessonttraitéesparl’exécutiond’unscriptPHParbitraireprésentdanspublic/oupardéfautpublic/index.php:URL Programme Args

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

    php-Slocalhost:8000-tpublic/

    69

  • ApplicationPHPSymfonyInvocationdeméthodesdansuneclassepourgérerdescheminsd’accèsàdesressources.Leprogrammeurn’écritpaslepointd’entréeindex.phpLeframeworkfournituncomposantoffrantdesfonctionsderoutage:décodageducontexteHTTPpourinvoquerlabonneméthodedelabonneclasseLeprogrammeurn’aplusqu’àécrireuneclassePHP:programmationévénementielledansuncontexteobjet

    70

  • TakeawayclientHTTPserveurHTTPmodèledecouches(3et+)

    présentationtraitementaccèsauxdonnées

    formatdesrequêtes/réponsesdansHTTPrequêtesGET,POST,…statuscodes:200,40x,…invocationdesprogrammesquigénèrentduHTML

    71

  • AnnexesCf. pourdesannexesavecplusdedétails../poly.pdf

    72

    file:///CSC4101/cm-02/poly.pdf

  • Ensuite…

    73

  • Toutdesuite,séanceTPn°2HTTPTestd’exécutiond’uneapplicationWeb«fil-rouge»enPHP,s’exécutantenlocal

    74

  • Hors-présentield’iciauprochaincours3hàcaserdanslasemaine

    75

  • ChoixdesbinômespourprochaineséancedeTPpourdébutduprojet

    binômedanslemêmegroupenechangerapasparlasuite

    76

  • Q/R

    77

  • CopyrightDocumentpropriétédesesauteursetdeTélécomSudParis(saufexceptionsexplicitementmentionnées).Réservéàl’utilisationpourlaformationinitialeàTélécomSudParis.

    78