Interactions client-serveur
Introduction :
Accessible avec un navigateur Internet, le web offre l’accès à des pages et des données du monde entier. Les interactions avec les sites Internet ne se limitent pas à la consultation de pages ; il est également possible de demander et de transmettre des données. Nous allons nous pencher sur la manière dont ces données peuvent être transmises sur le web.
Après un rappel sur les protocoles HTTP et HTTPS découverts en classe de seconde, nous nous intéresserons aux requêtes formulées avec les méthodes GET et POST du protocole HTTP.
Puis nous étudierons l’emploi de GET et POST dans le cadre d’un formulaire. Ce formulaire nous permettra de transmettre des données au serveur via le protocole HTTP.
Enfin, nous relèverons les principales différences entre GET et POST, afin de nous aider à déterminer dans quel cas utiliser l’un ou l’autre dans nos requêtes.
Rappel sur les protocoles HTTP et HTTPS
Rappel sur les protocoles HTTP et HTTPS
Le web est construit sur le protocole HTTP et sa version sécurisée HTTPS.
Le protocole HTTP
Le protocole HTTP
HTTP est le protocole de communication du web.
- Ce protocole client-serveur permet l’accès aux sites et aux données du world wide web par le biais d’un navigateur Internet.
HTTP :
HTTP signifie HyperText Transfer Protocol, ou protocole de transfert hypertexte en français. La notion d’hypertexte renvoie aux liens cliquables qui permettent de naviguer de page en page et de site en site sur le world wide web, appelé plus simplement le « web ».
Le protocole HTTPS
Le protocole HTTPS
HTTPS :
HTTPS est une version sécurisée du HTTP qui ajoute un chiffrement des données échangées pour garantir la confidentialité des échanges.
- HTTP et sa déclinaison HTTPS sont des protocoles de type client-serveur, articulés autour de requêtes formulées par le client, et de réponses renvoyées par le serveur.
Ainsi, lorsqu’un internaute clique sur un lien pour accéder à une page web, son navigateur (le client) envoie une requête au site web (le serveur), qui répond en lui envoyant la page demandée.
Les méthodes du protocole HTTP
Les méthodes du protocole HTTP
Le protocole HTTP s’appuie sur une dizaine de méthodes pour indiquer les actions souhaitées. Nous nous intéresserons aux deux méthodes les plus courantes que sont GET et POST.
Méthodes :
Les méthodes sont des commandes, parfois appelées verbes, qui permettent aux clients de formuler des requêtes d’actions auprès des serveurs, afin d’obtenir en réponse des ressources.
Ces ressources peuvent être des pages web, des images ou d’autres types de documents. Les serveurs traitent les requêtes d’actions envoyées par les clients et émettent en retour des réponses.
Les ressources peuvent être aussi bien des données préexistantes que des données générées dynamiquement pour répondre à une requête spécifique.
Pour savoir quelles données fournir et sous quelle forme, les serveurs web s’appuient sur les requêtes envoyées.
- Ces requêtes contiennent un certain nombre d’informations techniques et de paramètres fournis par les clients.
- Un site de prévisions météorologiques se fondera sur le code postal ou le nom de votre ville pour vous proposer les prévisions correspondantes.
- Un service de messagerie se fondera sur votre identifiant et votre mot de passe pour vous donner accès aux messages qui vous sont spécifiquement destinés.
La méthode GET
La méthode GET
Méthode GET :
La méthode GET envoie des donnés au serveur pour obtenir une ressource spécifiée.
Cette méthode n’a aucun effet sur la ressource requise dans le sens où elle ne la modifie pas. La méthode GET peut donc être répétée et fournira le même résultat.
- De ce fait, une ressource servie par GET pourra être mise en cache si nécessaire.
Lorsque vous consultez les prévisions météorologiques du jour pour votre ville ou votre région, la ressource existe déjà : stockée sur le serveur, elle est simplement transmise à votre navigateur qui se chargera de son affichage. La météo d’une ville donnée est en effet identique pour vous et pour votre voisin.
La page stockée sur le serveur sera seulement actualisée, et de manière identique pour tous, lorsque les prévisions seront mises à jour.
- C’est le principe du cache, dont l’objectif est de limiter la charge du serveur.
Les requêtes GET ne doivent jamais être utilisées pour modifier des données sur le serveur.
- Dans un tel cas, on utilisera la méthode POST.
La méthode POST
La méthode POST
Méthode POST :
La méthode POST envoie des données au serveur pour créer, obtenir ou mettre à jour une ressource.
Cette méthode conduit généralement à des modifications côté serveur.
- Elle ne pourra pas être mise en cache.
Lorsque vous vous connectez à un forum, à un service de messagerie ou à un réseau social, les données sont générées dynamiquement pour fournir des informations qui vous sont propres.
Vos courriels ou vos messages doivent seulement s’afficher sur votre navigateur, pas sur celui de votre voisin. Vous avez également la possibilité de créer des données ou d’en mettre à jour.
L’envoi de données dans le cadre d’un formulaire
L’envoi de données dans le cadre d’un formulaire
Intéressons-nous de plus près aux méthodes GET et POST. Ces deux méthodes comportent un certain nombre de points communs, mais aussi des différences.
Nous allons étudier GET et POST dans un cadre identique, celui d’un formulaire : il va nous permettre de transmettre des informations au serveur web.
Nous allons composer ce formulaire à partir de l’élément
du langage HTML et analyser son fonctionnement.Principe de fonctionnement d’un formulaire
Principe de fonctionnement d’un formulaire
Un formulaire permet à un client (le navigateur Internet) de collecter et de transmettre des données à un serveur (ici le serveur web).
Pour pouvoir envoyer ces données, le navigateur Internet a besoin de connaître deux informations qui lui seront fournies par le code HTML du formulaire :
- la destination des données saisies dans le formulaire ;
- la méthode d’envoi de ces données.
La destination est l’adresse de la ressource (URL) côté serveur qui traitera les données issues de notre formulaire et qui transmettra en retour une réponse.
- La méthode d’envoi est une méthode HTTP valide, dans notre cas d’étude GET ou POST.
Création du formulaire en HTML avec la méthode GET
Création du formulaire en HTML avec la méthode GET
Notre formulaire de démonstration nous permettra de saisir et d’envoyer un code postal au serveur afin d’obtenir en retour les prévisions météorologiques locales à notre ville.
Notre code HTML est volontairement réduit à l’essentiel. Nous cherchons à obtenir un formulaire techniquement fonctionnel, sans aucune recherche ergonomique ou de mise en page.
- Composé à partir de l’élémentdu langage HTML, son code est le suivant :
Notre élément
comporte trois éléments enfants – les deux éléments de type sont indispensables :- le premier élémentde type définit un champ permettant la saisie de notre code postal ;
- le deuxième élémentde type définit un bouton permettant de déclencher l’envoi du formulaire au serveur ;
- le troisième élément de typeest optionnel : il définit une légende associée au champ de saisie du code postal pour guider l’utilisateur.
- La méthode et la destination de notre formulaire sont précisées via les attributs correspondants de l’élément.
Vous aurez remarqué que nous utilisons dans un premier temps la méthode GET. Nous ferons par la suite évoluer notre code pour employer la méthode POST et comparer les résultats obtenus.
- Si la méthode de la balise est omise, c’est par défaut la méthode GET qui est utilisée pour soumettre la requête au serveur.
- Si l’action de la balise est omise, le formulaire est par défaut soumis à sa propre adresse URL.
Nous insérons le code de notre formulaire dans un fichier html que nous nommerons « meteo.html ». Nous plaçons ce fichier sur un serveur web local ou distant (dans notre cas le serveur local nommé « localhost ») et nous y accédons avec un navigateur Internet à partir de son URL pour obtenir son rendu.
- Nous obtenons un affichage semblable à celui :
Affichage formulaire
Lorsque nous saisissons un code postal et que nous cliquons sur le bouton, notre navigateur Internet transmet :
- les données collectées par le formulaire ;
- selon le protocole indiqué dans le code HTML, vers la ressource URL du serveur qui en assurera le traitement.
Traitement du formulaire côté serveur
Traitement du formulaire côté serveur
Pour les besoins de notre démonstration, nous souhaitons vérifier que les données soumises par le biais de notre formulaire sont correctement reçues côté serveur pour pouvoir y être traitées.
Là encore, notre code se limitera à l’essentiel. Sa mission consiste à afficher les valeurs transmises depuis le formulaire, qu’elles aient été transmises par GET ou par POST. Dans un cas comme dans l’autre, notre code sera capable d’afficher les données reçues.
Nous utilisons pour cela le langage PHP qui est actuellement le langage de programmation web côté serveur le plus répandu.
Nous aurions toutefois pu écrire un code équivalent dans d’autres langages pour un serveur programmé par exemple en Python, en Java ou en Ruby.
- Voici le code PHP :
- et sont toutes deux des variables dites superglobales.
Variables superglobales :
Il s’agit de variables internes réservées par PHP et qui sont accessibles quel que soit le contexte.
Ces variables
et sont de type tableau associatif : elles contiennent des paires de clés et de valeurs qui sont automatiquement renseignées par PHP et rendues accessibles dans le script courant.- Notre code évalue chacune de ces deux variables et, si le tableau évalué n’est pas vide (conditionset ), son contenu est affiché.
Nous nommons « meteo.php » la page contenant notre code. Nous la plaçons sur notre serveur web à l’adresse indiquée par l’attribut action » de la balise
Dans le cas présent, il s’agit du même répertoire.
Lorsque nous soumettons notre formulaire depuis la page « meteo.html » en cliquant sur son bouton « envoyer », nous constatons que notre navigateur se rend sur notre page de destination « meteo.php ».
- Celle-ci reçoit bien les données que nous avons saisies dans le formulaire. Elle nous précise aussi la méthode employée pour les transmettre.
Affichage avec GET
Nous avons soumis les données avec la méthode GET.
- Notre code PHP qui s’exécute côté serveur produit donc l’affichage du tableau associatif.
- Notre formulaire ne comportant qu’un seul champ, nous obtenons une seule paire clé-valeur.
Si notre formulaire avait comporté plusieurs champs, le tableau associatif correspondant aurait affiché chaque paire clé-valeur à la suite.
Le nom de la clé correspond à l’attribut
de l’élément de notre formulaire html. Si cet attribut est omis, la valeur saisie dans le champ correspondant ne pourra pas être récupérée par le serveur.Vous remarquerez dans la barre d’adresse du navigateur la présence de la clé et de la valeur à la fin de l’URL après le signe « ? ».
- On comprend aisément que cela pourrait poser un problème si nous souhaitions transmettre des données confidentielles avec un formulaire. Nous y reviendrons un peu plus tard.
Observons d’abord ce qui se produit si nous employons la méthode POST à la place de GET.
Soumission de notre formulaire avec la méthode POST
Soumission de notre formulaire avec la méthode POST
Pour soumettre notre formulaire avec la méthode POST, il nous faut seulement éditer dans notre code source HTML l’attribut
de la balise : nous remplaçons GET par POST et nous enregistrons les changements.- Cette fois, lorsque nous renseignons à nouveau une valeur dans le champ code postal de notre page meteo.html et que nous cliquons sur le bouton « envoyer », nous obtenons en retour du serveur l’affichage du tableau associatif.
Affichage avec POST
Vous remarquerez que l’URL dans la barre d’adresses du navigateur indique uniquement l’adresse de notre fichier PHP : aucune donnée saisie dans le formulaire n’apparaît plus à ce niveau. Les données sont en effet transmises dans le corps de la requête et non plus à la suite de l’URL de la destination du formulaire.
- C’est la différence la plus visible entre GET et POST, mais pas la seule.
Les types de données transmissibles par formulaire
Les types de données transmissibles par formulaire
Nous savons maintenant créer un formulaire et déterminer la méthode d’envoi appropriée en fonction des cas. Nous allons maintenant aborder les différents types de données que nous pouvons collecter avec un formulaire, ainsi que la manière dont l’utilisateur nous communique ces données : saisie au clavier, clic de souris, choix dans des listes déroulantes etc.
Revenons dans un premier temps sur la balise INPUT et son attribut type.
- L’attribut type de la balise
L’attribut type permet de spécifier le type de données traitées.
Nous avons déjà découvert au travers des exemples précédents :
- le typequi permet la saisie de données textuelles ;
- le typequi génère l’envoi du formulaire.
- Il existe également un typequi permet de proposer la réinitialisation des données du formulaire par le navigateur en cas d’erreur.
D’autres types spécialisés sont à notre disposition pour faciliter la saisie et le contrôle préalable de certaines données fréquemment récoltées via des formulaires : adresse de courrier électronique, mot de passe, date, fichier joint, etc. Un formulaire peut également comporter des cases à cocher ou des boutons cliquables (appelés boutons radio).
Le tableau suivant récapitule les principaux types de champs d’un formulaire :
Valeur de l’attribut type | Type de données |
Texte simple | |
Bouton de soumission du formulaire | |
Bouton de réinitialisation du formulaire | |
Mot de passe (les caractères saisis sont masqués à l’écran) | |
Date (saisie d’une date ou choix d’une date dans un calendrier) | |
Valeur numérique | |
Valeur entre deux bornes (choix effectué par le déplacement d’un curseur à glissière) | |
Case à cocher | |
Bouton radio | |
Bouton cliquable simple | |
Couleur (choix d’une couleur dans un nuancier) | |
Caché (champ caché à l’utilisateur mais pouvant transmettre des données au serveur) | |
Transmission de fichier |
N’oubliez pas la principale différence entre les cases à cocher et les boutons radio :
- les cases à cocher d’un même groupe sont sélectionnables individuellement : plusieurs choix simultanés sont donc possibles ;
- les boutons radio d’un même groupe sont mutuellement exclusifs : un seul choix est possible ; tout clic sur autre bouton du même groupe désactive le choix précédent.
On peut également proposer à l’utilisateur des listes déroulantes de choix qu’il va pouvoir manipuler avec la souris.
- La balise
La balise
permet de construire une liste déroulante avec un certain nombre de choix parmi lesquels l’utilisateur pourra sélectionner la valeur souhaitée.Par défaut, les choix sont mutuellement exclusifs. Un attribut optionnel
permet d’autoriser les choix multiples, mais au prix de manipulations assez peu ergonomiques.- En général, dans ce cas, on préférera recourir à des cases à cocher plus intuitives d’emploi.
L’utilisateur de notre formulaire peut par ailleurs vouloir nous transmettre un message plus ou moins long. Une balise dédiée permet de le faire.
- La balise
La balise
permet la saisie d’un texte long avec d’éventuels retours à la ligne, non gérés par le type "text" de la balise .On emploiera une balise
pour collecter des commentaires de blog ou sur des plateformes communautaires, des avis clients sur un livre d’or, etc. Des attributs dédiés permettent de préciser le nombre de lignes et de colonnes de ce champ de saisie multilignes.Nous voilà familiers avec les formulaires, passons en revue et comparons maintenant les spécificités de GET et de POST, pour mieux comprendre dans quel cas utiliser l’une ou l’autre de ces méthodes.
Comparaisons GET et POST
Comparaisons GET et POST
L’emploi de l’une ou l’autre méthode dépend à la fois de considérations techniques, de sécurité et de bonne pratique.
Principales différences entre GET et POST
Principales différences entre GET et POST
Nous venons de le voir : avec la méthode GET, les données transmises apparaissent dans la barre d’adresse du navigateur, contrairement à la méthode POST, où seule l’URL de destination est affichée.
La méthode GET est assez limitée dans la quantité et le type de données qu’elle peut transmettre : au maximum deux mille caractères environ, et uniquement des caractères.
La méthode POST peut transmettre plusieurs mégaoctets de données, qui peuvent être des caractères mais aussi des données binaires (par exemple pour l’envoi d’un fichier).
Les pages obtenues avec la méthode GET peuvent être mises en cache et enregistrées dans les marque-pages ou favoris, contrairement aux pages obtenues avec la méthode POST.
- On peut donc considérer POST comme une méthode plus sûre que GET et capable de transmettre davantage d’informations de différents types.
Toutefois, il n’est pas nécessaire ni souhaitable d’utiliser systématiquement POST. On se priverait par exemple de la possibilité de mettre des données en cache, ce qui est parfois très utile, en particulier pour optimiser les sollicitations du serveur et préserver ainsi ses performances.
Quand utiliser GET ? Quand utiliser POST ?
Quand utiliser GET ? Quand utiliser POST ?
La règle pour choisir entre GET et POST est la suivante :
- si la requête ne transmet aucune information sensible, qu’elle n’effectue aucune modification côté serveur et qu’elle fournit un résultat identique si elle est répétée, on utilise GET ;
- si la requête transmet des informations sensibles ou qu’elle peut conduire à modifier l’état du serveur d’une manière ou d’une autre, on utilise POST.
Les navigateurs Internet intègrent les spécificités des méthodes GET et POST et proposent certains garde-fous. C’est pourquoi il vous sera possible de revenir en arrière ou de recharger une page obtenue avec une requête GET, mais pas avec une méthode POST.
- Si vous tentez de recharger une page obtenue avec une méthode POST, votre navigateur affichera un message d’alerte.
Message d’alerte affiché dans Chrome après une tentative de rafraîchissement d’un formulaire géré avec la méthode POST
Si vous rechargez une page montrant la météo de votre ville, un rechargement n'aura aucune conséquence, ni pour vous ni pour le serveur.
En revanche si vous veniez de publier un commentaire sur un blog, celui-ci pourrait être publié deux fois.
Ce serait encore plus gênant si vous veniez d'envoyer une commande à un site de commerce électronique : le renvoi intempestif de votre formulaire répéterait l’action initiale et pourrait créer une deuxième commande.
Dès que le traitement des données issues de votre formulaire entraîne côté serveur la création d'une entrée dans une base de données (table des commentaires pour le blog, table des commandes pour le site de commerce électronique), il faut systématiquement employer POST.
Cela s’applique également à la mise à jour d'informations déjà présentes en base de données.
Lorsque vous modifiez des paramètres de votre profil sur un site ou un réseau social, l’état du serveur va changer : il va en effet effectuer des mises à jour dans ses bases de données pour prendre en compte les modifications demandées.
- La méthode POST est donc requise pour toute modification de données côté serveur : ajout, modification ou suppression de données.
Conclusion :
Les formulaires nous permettent de collecter toutes sortes de données et le langage HTML nous offre un large éventail de fonctionnalités pour rendre les saisies de données ergonomiques pour l’utilisateur.
Ainsi, le protocole HTTP permet de recueillir des informations par l’intermédiaire de formulaires HTML et de les transmettre à un serveur web en employant, selon les cas, la méthode GET ou la méthode POST.
Nous savons maintenant comment choisir la méthode, selon des critères techniques, sécuritaires et de bonne pratique.