SlideShare une entreprise Scribd logo
1  sur  40
Programmation Web :
Protocole HTTP, cookies, sessions
Jérôme CUTRONA
jerome.cutrona@univ-reims.fr
13:51:39 Programmation Web 2023-2024 1
INTRODUCTION
2
13:51:39 Programmation Web 2023-2024
Introduction
 HTTP : HyperText Transfer Protocol
 HTTP : Protocole du Web
 Protocole d'échange entre client et serveur Web
 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, fetch
3
13:51:39 Programmation Web 2023-2024
PRINCIPE ET MÉCANIQUE RÉSEAU
4
13:51:39 Programmation Web 2023-2024
Principe général
5
13:51:39 Programmation Web 2023-2024
Connexion réseau
6
13:51:39 Programmation Web 2023-2024
Réseau
Client Web
(Navigateur)
Serveur Web
Requête HTTP
Fermeture de connexion
Connexion TCP établie
SYN
Réponse HTTP
SYN, ACK
ACK
Poignée de main en 3 étapes
Connexion TCP (port 80)
Réseau
Client Web
(Navigateur)
Utilisation de HTTP/1.0
7
13:51:39 Programmation Web 2023-2024
Serveur Web
(http://cutrona)
Réponse HTTP
Requête HTTP
Établissement d’une
connexion TCP (port 80)
Possède des
ressources
Désire des
ressources
Ressources
As-tu / ? Fermeture de connexion
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="css/style.css" rel="stylesheet" type="text/css">
<title>J. Cutrona</title>
</head>
<body>
<div id='b_connexion'>
<form action='/index.php' method='post'>
<table>
<tr><td><input type='text' name='login' size='5' value='login' onClick="if (this.value=='login') this.value=''">
<input type='password' name='passwd' size='5'>
<td><input type='submit' value='OK'>
</table>
</form>
</div>
<h1>Programmation Web</h1>
<div class='partie'>
<a href='progwebS1'>Programmation Web S1</a><br>
<a href='progwebS2'>Programmation Web S2</a><br>
<a href='progwebS3'>Programmation Web S3</a><br>
</div>
<span id='lastmodified'>
Dernière modification de cette page le 07/09/2008 à 23h27 </span>
<div class='valid'>
<a href='http://wwwdoc/w3c-validator/check?uri=referer'>
<img border="0"
src="/img/valid-html401.gif"
alt="Valid HTML 4.01!" height="31" width="88"></a>
<img border="0"
src="/img/vcss.gif"
alt="Valid CSS!" height="31" width="88">
</div>
</body>
</html>
Fichier
/
Oui
<!DOCTYPE html PUBLIC…
<html>
<head>
…
</html>
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
8
13:51:39 Programmation Web 2023-2024
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
9
13:51:39 Programmation Web 2023-2024
MESSAGES HTTP
10
13:51:39 Programmation Web 2023-2024
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]
[Entête: valeur]
[…]

[Corps de message = charge utile]
11
13:51:39 Programmation Web 2023-2024
HTTP 1.0: 16 en-têtes
HTTP 1.1: 46 en-têtes
Ligne vide, marque la fin des en-têtes
REQUÊTES HTTP
12
13:51:39 Programmation Web 2023-2024
Requête HTTP 1.0
GET|POST|HEAD chemin_de_la_ressource HTTP/1.0
User-Agent: agent
[Entête: valeur]
[Entête: valeur]
[…]

[Corps de message = charge utile]
13
13:51:39 Programmation Web 2023-2024
Netiquette
Ligne vide, marque la fin des en-têtes
Méthodes de requête HTTP
HEAD
demande des informations sur la ressource désignée
GET
demande des informations sur la ressource désignée ET la ressource
POST
envoie des données (formulaire vers le serveur), demande des informations
sur la ressource désignée ET la ressource
PUT, PATCH, DELETE
Utilisées pour les API Web
14
13:51:39 Programmation Web 2023-2024
GET / HTTP/1.0

POST /page1.html HTTP/1.0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64;
rv:60.0) Gecko/20100101 Firefox/60.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 13

say=Hi&to=Mom
Exemple de requête HTTP
15
13:51:39 Programmation Web 2023-2024
Ligne vide, marque la fin des en-têtes
Ligne vide, marque la fin des en-têtes
Corps de message = charge utile
RÉPONSES HTTP
16
13:51:39 Programmation Web 2023-2024
Réponse HTTP
HTTP/version code phrase
Content-Type: type_mime
[Entête: valeur]
[Entête: valeur]
[…]

[Corps de message = charge utile]
17
13:51:39 Programmation Web 2023-2024
Obligatoire si corps présent
Ligne vide, marque la fin des en-têtes
Le client doit être informé de
la nature de la ressource :
HTML
Image JPEG
Doc PDF
Animation Flash
…
Exemples de type_mime :
•text/html
•image/jpeg
•text/css
•video/mpeg
•…
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

<html>
<head><title>
...
18
13:51:39 Programmation Web 2023-2024
Ligne vide, marque la fin des en-têtes
Corps de message = charge utile
É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
19
13:51:39 Programmation Web 2023-2024
PROTOCOLE HTTP 1.1
20
13:51:39 Programmation Web 2023-2024
Protocole HTTP 1.1
 Contexte HTTP 1.0 :
 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 (proxy, serveurs virtuels)
21
13:51:39 Programmation Web 2023-2024
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 connexions persistantes,
ou inclure l'en-tête Connection: close à chacune des
requêtes
 supporter la réponse 100 Continue
22
13:51:39 Programmation Web 2023-2024
Requête HTTP 1.1
GET|POST|HEAD chemin_de_la_ressource HTTP/1.1
Host: hôte
User-Agent: agent
[header]
[header]
[…]

[Corps de message = charge utile]
23
13:51:39 Programmation Web 2023-2024
Obligatoire
Netiquette
Ligne vide, marque la fin des en-têtes
FORMULAIRES
24
13:51:39 Programmation Web 2023-2024
Soumission de formulaires
<form action="form.php" method="GET">
Requête HTTP si envoi du formulaire :
GET form.php?p1=X&p2=Y HTTP/1.0

Traduit dans l'URL : http://serveur.fr/form.php?p1=X&p2=Y
Peut donc être mis en favori
25
13:51:39 Programmation Web 2023-2024
Valeurs saisies dans le formulaire :
Couples nomChamp=valEncodée séparés par &
Soumission de formulaires
<form action="form.php" method="POST">
Requête HTTP si envoi du formulaire :
POST form.php HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 9

p1=X&p2=Y
NON traduit dans l'URL : http://serveur.fr/form.php
Ne peut donc PAS être mis en favori
26
13:51:39 Programmation Web 2023-2024
Valeurs saisies dans le formulaire :
Couples nomChamp=valEncodée séparés par &
Encodage des données
HTTP : ASCII 7bits (base commune à toutes les plateformes)
Tout caractère non ASCII 7bits doit être encodé
 saisies dans les formulaires (fait par le navigateur)
 URL (à faire soi-même)
Principe d’encodage :
 Espace  +
 Caractères spéciaux  %code_ASCII_hexa
 Caractères accentués  %code_ASCII_hexa
 Exemples : ô  %F4
[  %5B
27
13:51:39 Programmation Web 2023-2024
COOKIES
28
13:51:39 Programmation Web 2023-2024
Cookies
 But :
 É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 (en-tête de réponse HTTP) :
Set-Cookie: var=val[; expires=date; path=chemin;
domain=domaine]
 Client (en-tête de requête HTTP) :
Cookie: var=val;
29
13:51:39 Programmation Web 2023-2024
Cookies, principe des échanges
30
13:51:39 Programmation Web 2023-2024
Réseau
Client Web
(Navigateur)
Serveur Web
(Apache)
GET / HTTP/1.1
…
HTTP/1.1 200 OK
Set-Cookie: Id=d81…8a; path=/;
…
GET /liste HTTP/1.1
Cookie: Id=d81…8a
…
HTTP/1.1 200 OK
…
Id=d81…8a;
path=/;
Cookies, principe des échanges (suite)
31
13:51:39 Programmation Web 2023-2024
Réseau
Client Web
(Navigateur)
Serveur Web
(Apache)
GET / HTTP/1.1
Cookie: Id=d81…8a
…
HTTP/1.1 200 OK
…
Id=d81…8a;
path=/;
GET /logout HTTP/1.1
Cookie: Id=d81…8a
…
HTTP/1.1 200 OK
…
Cookies
 Avantages :
 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
32
13:51:39 Programmation Web 2023-2024
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
]]]]]] )
33
13:51:39 Programmation Web 2023-2024
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
www.example.com
 le sous-domaine www.example.com
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, …
Cookies en PHP
 Vérifier la présence d'un cookie :
 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 ressource suivante
 Effacer un cookie déjà placé :
placer le même cookie mais avec une valeur vide ou false
34
13:51:39 Programmation Web 2023-2024
SESSIONS
35
13:51:39 Programmation Web 2023-2024
Sessions
 Stockage sur le serveur des données associées à un client
particulier
 Nécessite une identification unique pertinente et persistante des
clients
 Identifiant de session (SHA-2 512bits)
 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é
36
13:51:39 Programmation Web 2023-2024
Sessions
37
13:51:39 Programmation Web 2023-2024
Réseau
Serveur
cb2…aa
Démarrer session
id : cb2…aa
GET /
Set-Cookie: id=cb2…aa
Cookie: id=cb2…aa
OK: …
Client 2
Client 1
e42…5b
Démarrer session
id : e42…5b
Données de
session pour e42…5b
Données de
session pour cb2…aa
GET /
Set-Cookie: id=e42…5b
Cookie: id=e42…5b
OK: …
Cookie
id : e42…5b
Cookie
id : cb2…aa
Sessions
38
13:51:39 Programmation Web 2023-2024
Réseau
Client Web
(Navigateur)
Serveur Web
(Apache)
Données
de
session
GET /index.php HTTP/1.1
…
HTTP/1.1 200 OK
Set-Cookie: Id=d81…8a; path=/;
…
GET /liste HTTP/1.1
Cookie: Id=d81…8a
…
HTTP/1.1 200 OK
…
Id=d81…8a;
path=/;
$_SESSION
'data' 1212
…
PHP
PHP
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 )
39
13:51:39 Programmation Web 2023-2024
Sessions
 Modifie les paramètres du cookie de session
void session_set_cookie_params (
int lifetime
[, string path
[, string domain
[, bool secure
[, bool httponly
]]]] )
40
13:51:39 Programmation Web 2023-2024
Durée de vie en secondes
10 jours : 10*24*60*60
Si non précisé, expire à la fermeture du navigateur
(Attention, lifetime pour session vs expire pour cookie
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
www.example.com
 le sous-domaine www.example.com
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, …

Contenu connexe

Similaire à S2-00-HTTP.pptx

Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Olivier Le Goaër
 
Digital race evolution programmation web 1.0
Digital race   evolution programmation web 1.0Digital race   evolution programmation web 1.0
Digital race evolution programmation web 1.0Sequoia-ID
 
[TechDays 2012] : Quoi de neuf dans ASP.NET 4.5
[TechDays 2012] : Quoi de neuf dans ASP.NET 4.5[TechDays 2012] : Quoi de neuf dans ASP.NET 4.5
[TechDays 2012] : Quoi de neuf dans ASP.NET 4.5Mohamed Nemili
 
Quoi de neuf dans ASP.NET 4.5
Quoi de neuf dans ASP.NET 4.5Quoi de neuf dans ASP.NET 4.5
Quoi de neuf dans ASP.NET 4.5Microsoft
 
REST JUG Toulouse 20100615
REST JUG Toulouse 20100615REST JUG Toulouse 20100615
REST JUG Toulouse 20100615JUG Toulouse
 
Presentation
PresentationPresentation
Presentationbois
 
Resource Oriented Architecture
Resource Oriented ArchitectureResource Oriented Architecture
Resource Oriented ArchitectureDNG Consulting
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!CARA_Lyon
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!CARA_Lyon
 
Examen
Examen Examen
Examen TECOS
 
Appels de procédures distants (RPC)
Appels de procédures distants (RPC)Appels de procédures distants (RPC)
Appels de procédures distants (RPC)Heithem Abbes
 
La connexion Outlook : présent et futur
La connexion Outlook : présent et futurLa connexion Outlook : présent et futur
La connexion Outlook : présent et futurMicrosoft Décideurs IT
 
S2-01-PHP.pptx
S2-01-PHP.pptxS2-01-PHP.pptx
S2-01-PHP.pptxkohay75604
 

Similaire à S2-00-HTTP.pptx (20)

Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !
 
Digital race evolution programmation web 1.0
Digital race   evolution programmation web 1.0Digital race   evolution programmation web 1.0
Digital race evolution programmation web 1.0
 
[TechDays 2012] : Quoi de neuf dans ASP.NET 4.5
[TechDays 2012] : Quoi de neuf dans ASP.NET 4.5[TechDays 2012] : Quoi de neuf dans ASP.NET 4.5
[TechDays 2012] : Quoi de neuf dans ASP.NET 4.5
 
Quoi de neuf dans ASP.NET 4.5
Quoi de neuf dans ASP.NET 4.5Quoi de neuf dans ASP.NET 4.5
Quoi de neuf dans ASP.NET 4.5
 
spring.pdf
spring.pdfspring.pdf
spring.pdf
 
REST JUG Toulouse 20100615
REST JUG Toulouse 20100615REST JUG Toulouse 20100615
REST JUG Toulouse 20100615
 
Cours intro
Cours introCours intro
Cours intro
 
Presentation
PresentationPresentation
Presentation
 
Chapitre 1.pdf
Chapitre 1.pdfChapitre 1.pdf
Chapitre 1.pdf
 
Resource Oriented Architecture
Resource Oriented ArchitectureResource Oriented Architecture
Resource Oriented Architecture
 
Ter Web Service Intro
Ter Web Service IntroTer Web Service Intro
Ter Web Service Intro
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!
 
Examen
Examen Examen
Examen
 
Appels de procédures distants (RPC)
Appels de procédures distants (RPC)Appels de procédures distants (RPC)
Appels de procédures distants (RPC)
 
La connexion Outlook : présent et futur
La connexion Outlook : présent et futurLa connexion Outlook : présent et futur
La connexion Outlook : présent et futur
 
La connexion Outlook : présent et futur
La connexion Outlook : présent et futurLa connexion Outlook : présent et futur
La connexion Outlook : présent et futur
 
Jms.back.to.basic
Jms.back.to.basicJms.back.to.basic
Jms.back.to.basic
 
PHP et PHP Framework
PHP et PHP FrameworkPHP et PHP Framework
PHP et PHP Framework
 
S2-01-PHP.pptx
S2-01-PHP.pptxS2-01-PHP.pptx
S2-01-PHP.pptx
 

Plus de kohay75604

Chapitre1_Introduction_res_sans_fils_mobiles.pdf
Chapitre1_Introduction_res_sans_fils_mobiles.pdfChapitre1_Introduction_res_sans_fils_mobiles.pdf
Chapitre1_Introduction_res_sans_fils_mobiles.pdfkohay75604
 
catalogue PFE 2023.pdf
catalogue PFE 2023.pdfcatalogue PFE 2023.pdf
catalogue PFE 2023.pdfkohay75604
 
Chap 2 - Etudiant.pdf
Chap 2 - Etudiant.pdfChap 2 - Etudiant.pdf
Chap 2 - Etudiant.pdfkohay75604
 
Chap 1 - Etudiant.pdf
Chap 1 - Etudiant.pdfChap 1 - Etudiant.pdf
Chap 1 - Etudiant.pdfkohay75604
 
res_mobiles_ch4.pdf
res_mobiles_ch4.pdfres_mobiles_ch4.pdf
res_mobiles_ch4.pdfkohay75604
 
application SSL_TLS.pptx
application SSL_TLS.pptxapplication SSL_TLS.pptx
application SSL_TLS.pptxkohay75604
 
Inf_theory_lect2.pdf
Inf_theory_lect2.pdfInf_theory_lect2.pdf
Inf_theory_lect2.pdfkohay75604
 
Inf_theory_lect3.pdf
Inf_theory_lect3.pdfInf_theory_lect3.pdf
Inf_theory_lect3.pdfkohay75604
 
Inf_theory_lect4.pdf
Inf_theory_lect4.pdfInf_theory_lect4.pdf
Inf_theory_lect4.pdfkohay75604
 
Business Template with Transitions by Slidesgo.pptx
Business Template with Transitions by Slidesgo.pptxBusiness Template with Transitions by Slidesgo.pptx
Business Template with Transitions by Slidesgo.pptxkohay75604
 
S2-02-PHP-objet.pptx
S2-02-PHP-objet.pptxS2-02-PHP-objet.pptx
S2-02-PHP-objet.pptxkohay75604
 

Plus de kohay75604 (16)

crypto1.pdf
crypto1.pdfcrypto1.pdf
crypto1.pdf
 
Chapitre1_Introduction_res_sans_fils_mobiles.pdf
Chapitre1_Introduction_res_sans_fils_mobiles.pdfChapitre1_Introduction_res_sans_fils_mobiles.pdf
Chapitre1_Introduction_res_sans_fils_mobiles.pdf
 
catalogue PFE 2023.pdf
catalogue PFE 2023.pdfcatalogue PFE 2023.pdf
catalogue PFE 2023.pdf
 
Chap 3.pdf
Chap 3.pdfChap 3.pdf
Chap 3.pdf
 
Chap 2 - Etudiant.pdf
Chap 2 - Etudiant.pdfChap 2 - Etudiant.pdf
Chap 2 - Etudiant.pdf
 
Chap 1 - Etudiant.pdf
Chap 1 - Etudiant.pdfChap 1 - Etudiant.pdf
Chap 1 - Etudiant.pdf
 
res_mobiles_ch4.pdf
res_mobiles_ch4.pdfres_mobiles_ch4.pdf
res_mobiles_ch4.pdf
 
docker.pptx
docker.pptxdocker.pptx
docker.pptx
 
application SSL_TLS.pptx
application SSL_TLS.pptxapplication SSL_TLS.pptx
application SSL_TLS.pptx
 
SSL.TLS.pptx
SSL.TLS.pptxSSL.TLS.pptx
SSL.TLS.pptx
 
Inf_theory_lect2.pdf
Inf_theory_lect2.pdfInf_theory_lect2.pdf
Inf_theory_lect2.pdf
 
Inf_theory_lect3.pdf
Inf_theory_lect3.pdfInf_theory_lect3.pdf
Inf_theory_lect3.pdf
 
Inf_theory_lect4.pdf
Inf_theory_lect4.pdfInf_theory_lect4.pdf
Inf_theory_lect4.pdf
 
NFV.pdf
NFV.pdfNFV.pdf
NFV.pdf
 
Business Template with Transitions by Slidesgo.pptx
Business Template with Transitions by Slidesgo.pptxBusiness Template with Transitions by Slidesgo.pptx
Business Template with Transitions by Slidesgo.pptx
 
S2-02-PHP-objet.pptx
S2-02-PHP-objet.pptxS2-02-PHP-objet.pptx
S2-02-PHP-objet.pptx
 

S2-00-HTTP.pptx

  • 1. Programmation Web : Protocole HTTP, cookies, sessions Jérôme CUTRONA jerome.cutrona@univ-reims.fr 13:51:39 Programmation Web 2023-2024 1
  • 3. Introduction  HTTP : HyperText Transfer Protocol  HTTP : Protocole du Web  Protocole d'échange entre client et serveur Web  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, fetch 3 13:51:39 Programmation Web 2023-2024
  • 4. PRINCIPE ET MÉCANIQUE RÉSEAU 4 13:51:39 Programmation Web 2023-2024
  • 6. Connexion réseau 6 13:51:39 Programmation Web 2023-2024 Réseau Client Web (Navigateur) Serveur Web Requête HTTP Fermeture de connexion Connexion TCP établie SYN Réponse HTTP SYN, ACK ACK Poignée de main en 3 étapes Connexion TCP (port 80)
  • 7. Réseau Client Web (Navigateur) Utilisation de HTTP/1.0 7 13:51:39 Programmation Web 2023-2024 Serveur Web (http://cutrona) Réponse HTTP Requête HTTP Établissement d’une connexion TCP (port 80) Possède des ressources Désire des ressources Ressources As-tu / ? Fermeture de connexion <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <link href="css/style.css" rel="stylesheet" type="text/css"> <title>J. Cutrona</title> </head> <body> <div id='b_connexion'> <form action='/index.php' method='post'> <table> <tr><td><input type='text' name='login' size='5' value='login' onClick="if (this.value=='login') this.value=''"> <input type='password' name='passwd' size='5'> <td><input type='submit' value='OK'> </table> </form> </div> <h1>Programmation Web</h1> <div class='partie'> <a href='progwebS1'>Programmation Web S1</a><br> <a href='progwebS2'>Programmation Web S2</a><br> <a href='progwebS3'>Programmation Web S3</a><br> </div> <span id='lastmodified'> Dernière modification de cette page le 07/09/2008 à 23h27 </span> <div class='valid'> <a href='http://wwwdoc/w3c-validator/check?uri=referer'> <img border="0" src="/img/valid-html401.gif" alt="Valid HTML 4.01!" height="31" width="88"></a> <img border="0" src="/img/vcss.gif" alt="Valid CSS!" height="31" width="88"> </div> </body> </html> Fichier / Oui <!DOCTYPE html PUBLIC… <html> <head> … </html>
  • 8. 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 8 13:51:39 Programmation Web 2023-2024
  • 9. 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 9 13:51:39 Programmation Web 2023-2024
  • 11. 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] [Entête: valeur] […]  [Corps de message = charge utile] 11 13:51:39 Programmation Web 2023-2024 HTTP 1.0: 16 en-têtes HTTP 1.1: 46 en-têtes Ligne vide, marque la fin des en-têtes
  • 13. Requête HTTP 1.0 GET|POST|HEAD chemin_de_la_ressource HTTP/1.0 User-Agent: agent [Entête: valeur] [Entête: valeur] […]  [Corps de message = charge utile] 13 13:51:39 Programmation Web 2023-2024 Netiquette Ligne vide, marque la fin des en-têtes
  • 14. Méthodes de requête HTTP HEAD demande des informations sur la ressource désignée GET demande des informations sur la ressource désignée ET la ressource POST envoie des données (formulaire vers le serveur), demande des informations sur la ressource désignée ET la ressource PUT, PATCH, DELETE Utilisées pour les API Web 14 13:51:39 Programmation Web 2023-2024
  • 15. GET / HTTP/1.0  POST /page1.html HTTP/1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0 Content-Type: application/x-www-form-urlencoded Content-Length: 13  say=Hi&to=Mom Exemple de requête HTTP 15 13:51:39 Programmation Web 2023-2024 Ligne vide, marque la fin des en-têtes Ligne vide, marque la fin des en-têtes Corps de message = charge utile
  • 17. Réponse HTTP HTTP/version code phrase Content-Type: type_mime [Entête: valeur] [Entête: valeur] […]  [Corps de message = charge utile] 17 13:51:39 Programmation Web 2023-2024 Obligatoire si corps présent Ligne vide, marque la fin des en-têtes Le client doit être informé de la nature de la ressource : HTML Image JPEG Doc PDF Animation Flash … Exemples de type_mime : •text/html •image/jpeg •text/css •video/mpeg •…
  • 18. 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  <html> <head><title> ... 18 13:51:39 Programmation Web 2023-2024 Ligne vide, marque la fin des en-têtes Corps de message = charge utile
  • 19. É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 19 13:51:39 Programmation Web 2023-2024
  • 20. PROTOCOLE HTTP 1.1 20 13:51:39 Programmation Web 2023-2024
  • 21. Protocole HTTP 1.1  Contexte HTTP 1.0 :  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 (proxy, serveurs virtuels) 21 13:51:39 Programmation Web 2023-2024
  • 22. 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 connexions persistantes, ou inclure l'en-tête Connection: close à chacune des requêtes  supporter la réponse 100 Continue 22 13:51:39 Programmation Web 2023-2024
  • 23. Requête HTTP 1.1 GET|POST|HEAD chemin_de_la_ressource HTTP/1.1 Host: hôte User-Agent: agent [header] [header] […]  [Corps de message = charge utile] 23 13:51:39 Programmation Web 2023-2024 Obligatoire Netiquette Ligne vide, marque la fin des en-têtes
  • 25. Soumission de formulaires <form action="form.php" method="GET"> Requête HTTP si envoi du formulaire : GET form.php?p1=X&p2=Y HTTP/1.0  Traduit dans l'URL : http://serveur.fr/form.php?p1=X&p2=Y Peut donc être mis en favori 25 13:51:39 Programmation Web 2023-2024 Valeurs saisies dans le formulaire : Couples nomChamp=valEncodée séparés par &
  • 26. Soumission de formulaires <form action="form.php" method="POST"> Requête HTTP si envoi du formulaire : POST form.php HTTP/1.0 Content-Type: application/x-www-form-urlencoded Content-Length: 9  p1=X&p2=Y NON traduit dans l'URL : http://serveur.fr/form.php Ne peut donc PAS être mis en favori 26 13:51:39 Programmation Web 2023-2024 Valeurs saisies dans le formulaire : Couples nomChamp=valEncodée séparés par &
  • 27. Encodage des données HTTP : ASCII 7bits (base commune à toutes les plateformes) Tout caractère non ASCII 7bits doit être encodé  saisies dans les formulaires (fait par le navigateur)  URL (à faire soi-même) Principe d’encodage :  Espace  +  Caractères spéciaux  %code_ASCII_hexa  Caractères accentués  %code_ASCII_hexa  Exemples : ô  %F4 [  %5B 27 13:51:39 Programmation Web 2023-2024
  • 29. Cookies  But :  É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 (en-tête de réponse HTTP) : Set-Cookie: var=val[; expires=date; path=chemin; domain=domaine]  Client (en-tête de requête HTTP) : Cookie: var=val; 29 13:51:39 Programmation Web 2023-2024
  • 30. Cookies, principe des échanges 30 13:51:39 Programmation Web 2023-2024 Réseau Client Web (Navigateur) Serveur Web (Apache) GET / HTTP/1.1 … HTTP/1.1 200 OK Set-Cookie: Id=d81…8a; path=/; … GET /liste HTTP/1.1 Cookie: Id=d81…8a … HTTP/1.1 200 OK … Id=d81…8a; path=/;
  • 31. Cookies, principe des échanges (suite) 31 13:51:39 Programmation Web 2023-2024 Réseau Client Web (Navigateur) Serveur Web (Apache) GET / HTTP/1.1 Cookie: Id=d81…8a … HTTP/1.1 200 OK … Id=d81…8a; path=/; GET /logout HTTP/1.1 Cookie: Id=d81…8a … HTTP/1.1 200 OK …
  • 32. Cookies  Avantages :  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 32 13:51:39 Programmation Web 2023-2024
  • 33. 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 ]]]]]] ) 33 13:51:39 Programmation Web 2023-2024 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 www.example.com  le sous-domaine www.example.com 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, …
  • 34. Cookies en PHP  Vérifier la présence d'un cookie :  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 ressource suivante  Effacer un cookie déjà placé : placer le même cookie mais avec une valeur vide ou false 34 13:51:39 Programmation Web 2023-2024
  • 36. Sessions  Stockage sur le serveur des données associées à un client particulier  Nécessite une identification unique pertinente et persistante des clients  Identifiant de session (SHA-2 512bits)  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é 36 13:51:39 Programmation Web 2023-2024
  • 37. Sessions 37 13:51:39 Programmation Web 2023-2024 Réseau Serveur cb2…aa Démarrer session id : cb2…aa GET / Set-Cookie: id=cb2…aa Cookie: id=cb2…aa OK: … Client 2 Client 1 e42…5b Démarrer session id : e42…5b Données de session pour e42…5b Données de session pour cb2…aa GET / Set-Cookie: id=e42…5b Cookie: id=e42…5b OK: … Cookie id : e42…5b Cookie id : cb2…aa
  • 38. Sessions 38 13:51:39 Programmation Web 2023-2024 Réseau Client Web (Navigateur) Serveur Web (Apache) Données de session GET /index.php HTTP/1.1 … HTTP/1.1 200 OK Set-Cookie: Id=d81…8a; path=/; … GET /liste HTTP/1.1 Cookie: Id=d81…8a … HTTP/1.1 200 OK … Id=d81…8a; path=/; $_SESSION 'data' 1212 … PHP PHP
  • 39. 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 ) 39 13:51:39 Programmation Web 2023-2024
  • 40. Sessions  Modifie les paramètres du cookie de session void session_set_cookie_params ( int lifetime [, string path [, string domain [, bool secure [, bool httponly ]]]] ) 40 13:51:39 Programmation Web 2023-2024 Durée de vie en secondes 10 jours : 10*24*60*60 Si non précisé, expire à la fermeture du navigateur (Attention, lifetime pour session vs expire pour cookie 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 www.example.com  le sous-domaine www.example.com 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, …