Apprendre PHP & MySQL : Méthodes HTTP : GET & POST

Le protocole HTTP permet la communication entre un client et un serveur. Découvrons les méthodes GET et POST.

Icône de calendrier
Intermédiaire
12 chapitres

Sur le web, les clients (navigateurs), communiquent avec les serveurs en utilisant le protocole HTTP (HyperText Transfer Protocol). Ce protocole contrôle la façon dont le client formule ses demandes et la façon dont le serveur y répond. Ils permettent de spécifier la demande du client.

Le protocole HTTP connaît différentes méthodes de requête qui transitent du client vers le serveur. Ces méthodes indiquent le type d’action que l’on souhaite réaliser sur la ressource indiquée. Il est important de connaître les 2 plus courantes d’entre elles, à savoir GET et POST.

Méthode GET

Rôle et anatomie

Le rôle de la méthode GET est de demander une ressource au serveur. Cette ressource peut être de divers types : page HTML, fichier JSON, image, etc. C’est le type de requête par défaut qui s’exécute lorsqu’on accède à une page web via un lien.

Si vous accédez à une page web normalement via un lien, le navigateur se connecte au serveur et lui envoie une requête GET.

GET /mapage.php

Il est également possible de transmettre au serveur des informations via des paramètres de requête. Concrètement, ces paramètres transitent de manière visible dans l’URL.

La syntaxe est la suivante : https://monsite.com/ma-page.php?param1=valeur&param2=valeur

  • La chaîne de paramètres de requête est introduite par un ?.
  • Chaque paramètre est nommé, il se compose donc d’un nom et d’une valeur : param=valeur.
  • Si plusieurs paramètres doivent être inclus dans l’URL, ils sont séparés par un &.

Si les requêtes GET sans paramètres sont principalement utilisées pour retourner des pages web classiques, les requêtes avec paramètres sont quant à elles très utilisées lorsqu’il s’agit de demander un traitement « sur mesure » au serveur.

Prenons l’exemple d’une requête d’un moteur de recherche qui va toujours demander au serveur de retourner le template search.php, mais en lui spécifiant des informations variables (selon les critères de recherche saisis par l’utilisateur).

GET /search.php?category=dev&sort=likes_desc&keyword=php

Ici, le serveur va pouvoir récupérer les paramètres d’URL suivants :

  • keyword = php
  • category = dev
  • sort = likes_desc

On pourrait donc imaginer ensuite créer un script qui va récupérer en base de données les articles de la catégorie « développement » qui contiennent le mot « php », triés par nombre de likes décroissant.

Envoi de paramètres

Les paramètres GET peuvent être envoyés via une requête HTTP de 2 manières : directement dans l’URL ou via un formulaire.

Via l’URL

Il suffit de spécifier les paramètres en question dans l’URL, généralement via l’attribut href.

copié !
<a href="search.php?category=dev">Articles de dev</a>

Via un formulaire

Les formulaires HTML jouent le rôle d’IHM (Interface Homme-Machine). Ils permettent aux utilisateurs de renseigner des valeurs pour les paramètres GET de manière interactive.

Pour cela, on utilise :

  • Un attribut HTML method qui permet de spécifier avec quelle méthode HTTP sera interrogé le serveur à la soumission du formulaire.
  • Un attribut HTML action qui permet de spécifier le chemin relatif ou absolu vers le fichier qui va recevoir les données.
copié !
<form action="search.php" method="GET">
	<div class="form-item">
		<label for="keyword">Recherche :</label>
		<input type="search" id="keyword" name="keyword">
	</div>
	<div class="form-item">
		<p>Catégorie :</p>
		<input type="radio" name="category" id="dev" value="dev">
		<label for="dev">Développement</label>
		<input type="radio" name="category" id="hardware" value="hardware">
		<label for="hardware">Hardware</label>
	</div>
	<div class="form-item">
		<label for="sort">Trier par :</label>
		<select name="sort" id="sort">
			<option value="title_asc">Titre (A-Z)</option>
			<option value="title_desc">Titre (Z-A)</option>
			<option value="likes_asc">Nombre de likes (croissant)</option>
			<option value="likes_desc">Nombre de likes (décroissant)</option>
		</select>
	</div>
	<div class="form-item">
		<input type="submit" value="ok">
	</div>
</form>

Autres technologies

Il est également possible d’envoyer ces paramètres GET au serveur autrement comme par exemple via :

  • L’API Fetch de JavaScript
  • Des outils de tests d’API comme Postman ou Insomnia

Récupération de paramètres

Il va bien entendu être possible de récupérer en PHP les paramètres GET envoyés via l’URL ou un formulaire, afin de les exploiter.

Pour cela, on fait appel à la variable superglobale $_GET['param']. param correspondant à l’attribut HTML name du champ pour lequel on souhaite récupérer la saisie de l’utilisateur.

copié !
// Récupération des paramètres GET dans une variable afin d'en alléger la syntaxe pour une réutilisation ultérieure
$keyword = $_GET['keyword'];
$category = $_GET['category'];
$sort = $_GET['sort'];

// Exécution de la requête de récupération des articles de la catégorie « développement » qui contiennent le mot « php », triés par nombre de likes décroissant

Méthode POST

Rôle et anatomie

Contrairement à GET, le rôle de la méthode POST est d’envoyer des données au serveur. Ces données proviennent généralement de formulaires utilisateur.

Si vous soumettez un formulaire, le navigateur se connecte au serveur et lui envoie une requête POST.

POST /mapage.php

Cette méthode permet bien évidemment aussi de transmettre des paramètres, mais les ajoute cette fois-ci non pas dans l’URL, mais à l’intérieur de l’en-tête HTTP. Ils sont masqués de l’utilisateur.

Envoi de paramètres

Via un formulaire

Les formulaires qui envoient des informations au serveur n’ayant pas vocation à retourner de résultats, mais bien d’y écrire des choses, reposent sur la méthode HTTP POST.

Prenons l’exemple d’une requête de formulaire de login, qui, une fois soumis, va demander au serveur de réaliser les vérifications d’authentification.

copié !
<form action="login.php" method="POST">
	<label for="login">Adresse email :</label>
	<input type="email" name="login" id="login">
	<label for="pwd">Mot de passe :</label>
	<input type="password" name="pwd" id="pwd">
	<input type="submit" value="connexion">
</form>

Autres technologies

Il est également possible d’envoyer ces paramètres GET au serveur autrement comme par exemple via :

  • L’API Fetch de JavaScript
  • Des outils de tests d’API comme Postman ou Insomnia

Récupération de paramètres

Pour récupérer les paramètres POST en provenance du formulaire, on fait appel à $_POST['param']. param correspondant à l’attribut HTML name du champ pour lequel on souhaite récupérer la saisie de l’utilisateur.

copié !
// Récupération des paramètres POST dans une variable afin d'en alléger la syntaxe pour une réutilisation ultérieure
$login = $_POST['login'];
$pwd = $_POST['pwd'];

// Exécution du script qui gère l'authentification de l'utilisateur...

Autres méthodes HTTP

GET et POST ne sont pas les seules méthodes HTTP.

Il existe aussi PUT et PATCH qui permettent de modifier des ressources sur le serveur, ou encore DELETE qui permet d’en supprimer.