HTTP : Le langage universel du web
Lorsque tu tapes une adresse comme https://nsi-lycee.fr dans ton navigateur, tu déclenches une conversation invisible mais essentielle entre ton ordinateur (le client) et un ordinateur distant (le serveur). Cette conversation suit des règles précises définies par le protocole HTTP (HyperText Transfer Protocol). C'est le fondement de la navigation web et une notion clé en NSI pour comprendre comment les applications web que tu vas peut-être coder fonctionnent.
Imagine HTTP comme un protocole de question-réponse. Ton navigateur envoie une requête (une question) pour demander une ressource : une page HTML, une image, un fichier CSS. Le serveur, s'il comprend la requête et trouve la ressource, renvoie une réponse contenant les données demandées, accompagnée d'informations sur leur nature et leur statut.
La structure d'une requête HTTP
Une requête HTTP est un message structuré envoyé par le client. Elle se compose de plusieurs parties obligatoires.
La ligne de requête
C'est la première ligne. Elle contient trois éléments essentiels :
- La méthode : L'action que le client veut effectuer. Les plus courantes sont :
- GET : Récupérer une ressource (lire une page).
- POST : Envoyer des données au serveur (envoyer un formulaire).
- PUT / DELETE : Modifier ou supprimer une ressource (utilisées dans les API).
- L'URL cible : Le chemin de la ressource demandée (ex:
/cours/python.html). - La version du protocole (ex: HTTP/1.1 ou HTTP/2).
Exemple de ligne de requête : GET /accueil.html HTTP/1.1
Les en-têtes (Headers)
Ce sont des lignes optionnelles qui donnent des informations contextuelles au serveur. Elles sont sous la forme Clé: Valeur.
- Host : Le nom de domaine du serveur (obligatoire en HTTP/1.1).
- User-Agent : Décrit le navigateur et le système d'exploitation du client.
- Accept : Indique les types de contenu que le client peut comprendre (ex:
text/html). - Cookie : Envoie les cookies stockés pour ce site.
Le corps (Body)
Il est principalement utilisé avec les méthodes POST ou PUT pour envoyer les données d'un formulaire ou un fichier JSON vers le serveur. Une requête GET n'a généralement pas de corps.
La réponse du serveur décryptée
Après avoir traité la requête, le serveur renvoie une réponse, elle aussi structurée.
La ligne de statut
C'est la première ligne de la réponse. Elle contient :
- La version du protocole.
- Un code de statut numérique (le fameux 404 !).
- Une phrase explicative courte.
Exemple : HTTP/1.1 200 OK ou HTTP/1.1 404 Not Found.
Les codes de statut HTTP
Ils sont regroupés en classes :
- 1xx (Information) : La requête est reçue, le processus continue.
- 2xx (Succès) : L'action a été reçue, comprise et acceptée.
- 200 OK : La requête a réussi.
- 201 Created : Une ressource a été créée (après un POST).
- 3xx (Redirection) : Une action supplémentaire est nécessaire pour compléter la requête.
- 301 Moved Permanently : La ressource a changé d'adresse définitivement.
- 302 Found : Redirection temporaire.
- 4xx (Erreur client) : La requête contient une syntaxe incorrecte ou ne peut être satisfaite.
- 400 Bad Request : La requête est mal formée.
- 403 Forbidden : Accès refusé (pas les droits).
- 404 Not Found : La ressource demandée n'existe pas sur ce serveur.
- 5xx (Erreur serveur) : Le serveur a échoué à satisfaire une requête apparemement valide.
- 500 Internal Server Error : Erreur générique du serveur.
- 503 Service Unavailable : Le serveur est surchargé ou en maintenance.
Les en-têtes et le corps de la réponse
Comme pour la requête, la réponse contient des en-têtes (Content-Type: text/html, Set-Cookie: ...) et surtout un corps. C'est dans ce corps que se trouve la ressource tant attendue : le code HTML de la page, l'image, le fichier JSON de l'API, etc.
HTTP en pratique avec Python
En NSI, tu ne te contentes pas de théoriser, tu pratiques ! Python possède d'excellentes bibliothèques pour émettre des requêtes HTTP et analyser les réponses, ce qui est crucial pour scrapper des données ou utiliser des API web.
Voici un exemple simple avec la bibliothèque requests, qu'il faut d'abord installer (pip install requests) :
import requests
# Envoi d'une requête GET
reponse = requests.get('https://api.github.com')
# Affichage du code de statut
print(f"Code statut : {reponse.status_code}") # Affiche 200
# Affichage des en-têtes
print("En-têtes :", reponse.headers['Content-Type']) # Affiche 'application/json'
# Accès au corps de la réponse (ici du JSON)
donnees = reponse.json()
print(f"Message de bienvenue de l'API : {donnees['current_user_url']}")Ce petit script dialogue avec l'API publique de GitHub en utilisant HTTP. Il envoie une requête GET, reçoit une réponse 200, lit l'en-tête Content-Type pour savoir que les données sont en JSON, et enfin les parse pour en extraire une information.
Comprendre HTTP te permet de passer de simple consommateur du web à acteur, capable de créer des clients pour interagir avec n'importe quel service en ligne, une compétence précieuse en informatique.
Le savais-tu ? HTTP est un protocole "sans état" (stateless). Cela signifie que chaque requête est indépendante. Le serveur ne "se souvient" pas de toi d'une requête à l'autre. C'est pour contourner cette limite qu'on utilise des mécanismes comme les cookies ou les sessions.
