Fondamentaux de l'informatique

Définition détaillée du protocole HTTP

Requêtes et réponses

Qu'est-ce qu'une URL ? (Uniform Resource Locator)

  • Schéma : Ce champ indique le protocole utilisé pour accéder à la ressource, par exemple HTTP, HTTPS ou FTP.
  • Utilisateur : Certaines services nécessitent une authentification, vous pouvez inclure le nom d'utilisateur et le mot de passe dans l'URL.
  • Hôte/Domaine : C'est le nom de domaine ou l'adresse IP du serveur que vous souhaitez atteindre.
  • Port : C'est le port auquel vous voulez vous connecter, généralement 80 pour HTTP et 443 pour HTTPS, mais il peut être tout autre port entre 1 et 65535.
  • Chemin : C'est le nom du fichier ou l'emplacement de la ressource que vous essayez d'accéder.
  • Chaîne de requête : C'est des informations supplémentaires envoyées au chemin de la requête. Par exemple, /blog?id=1 indique que vous souhaitez recevoir l'article de blog avec l'ID 1.
  • Fragment : C'est une référence à un emplacement spécifique sur la page réelle. Il est souvent utilisé pour accéder directement à une section particulière d'une page longue.

Émission d'une requête

Il est possible d'émettre une requête vers un serveur web en utilisant une seule ligne comme GET / HTTP/1.1 (méthode de requête + version HTTP).

Exemple de requête :

GET / HTTP/1.1

Host: exemple.com
User-Agent: Mozilla/5.0 Firefox/87.0
Referer: https://exemple.com/

Ligne 1 : Cette requête utilise la méthode GET (voir plus loin les méthodes HTTP) pour demander la page d'accueil et indique que nous utilisons la version 1.1 du protocole HTTP.

Ligne 2 : Nous indiquons au serveur web que nous voulons le site exemple.com.

Ligne 3 : Nous indiquons au serveur web que nous utilisons le navigateur Firefox en version 87.

Ligne 4 : Nous indiquons au serveur web que la page précédemment visitée était https://exemple.com.

Ligne 5 : Toute requête HTTP se termine par une ligne vide pour indiquer que la requête est terminée.

Exemple de réponse :

HTTP/1.1 200 OK

Serveur: nginx/1.15.8
Date: Ven, 09 Avr 2021 13:34:03 GMT
Type-de-contenu: text/html
Longueur-du-contenu: 98


<html>
<head>
    <title>Exemple</title>
</head>
<body>
    Bienvenue sur Exemple.com
</body>
</html>

Ligne 1 : La version du protocole HTTP utilisée par le serveur (ici HTTP 1.1) est suivie du code d'état HTTP (ici "200 OK") qui signifie que la requête a été traitée avec succès.

Ligne 2 : Cela nous informe du logiciel et de la version du serveur web.

Ligne 3 : Date, heure et fuseau horaire actuels du serveur web.

Ligne 4 : L'en-tête Type-de-contenu indique au client quel type d'information sera envoyée, par exemple HTML, image, vidéo, PDF, XML.

Ligne 5 : L'en-tête Longueur-du-contenu indique au client la taille de la réponse, ce qui permet de vérifier qu'aucune donnée n'a été perdue.

Ligne 6 : La réponse HTTP contient une ligne vide pour confirmer la fin de la réponse HTTP.

Lignes 7-14 : Les informations demandées, ici la page d'accueil.

Méthodes HTTP

  • GET : Cela sert à obtenir des informations auprès du serveur web.
  • POST : Cela sert à soumettre des données au serveur web et peut créer de nouveaux enregistrements.
  • PUT : Cela sert à soumettre des données au serveur web afin de mettre à jour des informations.
  • DELETE : Cela sert à supprimer des informations/enregistrements du serveur web.

Codes d'état HTTP

Certains des codes d'état HTTP les plus courants sont les suivants :

200 - OK La requête a été traitée avec succès.
201 - Créé Un nouveau ressource a été créée (par exemple, un nouvel utilisateur ou un nouvel article de blog).
301 - Déplacé définitivement Cela redirige le navigateur du client vers une nouvelle page web, ou informe les moteurs de recherche que la page a été déplacée vers un autre endroit.
302 - Trouvé Semblable à la redirection permanente, mais cela indique une modification temporaire qui pourrait changer à l'avenir.
400 - Mauvaise requête Cela informe le navigateur qu'il y a un problème ou une omission dans la requête. Cela peut parfois être utilisé si le serveur attend un certain paramètre et que le client ne l'a pas fourni.
401 - Non autorisé Vous ne pouvez pas voir cette ressource sans être autorisé par l'application web (généralement nécessitant un nom d'utilisateur et un mot de passe).
403 - Interdit Vous n'avez pas la permission de voir cette ressource, que vous soyez connecté ou non.
405 - Méthode non autorisée Cette ressource ne permet pas cette méthode de requête, par exemple, si vous envoyez une requête GET à une ressource qui attend une requête POST.
404 - Page non trouvée La page/ressource demandée n'existe pas.
500 - Erreur interne du serveur Le serveur a rencontré une erreur lors du traitement de votre requête et ne sait pas comment la gérer correctement.
503 - Service indisponible Ce serveur ne peut pas traiter votre requête car il est soit surchargé, soit en cours de maintainance et arrêté.

Pour les apprenants visuels, vous pouvez consulter une excellenet ressource appelée http.cat pour apprendre les codes d'état.

En-têtes

En-têtes de requête généraux

Ces en-têtes sont envoyés par le client (généralement un navigateur) au serveur.

  • Hôte : Certains serveurs hébergent plusieurs sites web, donc en fournissant l'en-tête Hôte, vous pouvez indiquer à quel site vous avez besoin, sinon vous obtiendrez simplement le site par défaut du serveur.
  • User-Agent : C'est le logiciel et la version de votre navigateur, qui informe le serveur web de votre navigateur pour qu'il puisse formater correctement le site, certains éléments HTML, JavaScript et CSS ne sont disponibles que dans certains navigateurs.
  • Longueur-du-contenu : Lorsque vous envoyez des données à un serveur web (par exemple, un formulaire), la longueur du contenu indique au serveur quelle quantité de données doit être attendue dans la requête réseau. Ainsi, le serveur peut s'assurer qu'aucune donnée n'est manquante.
  • Acceptation-encodage : Cela indique au serveur web quelles méthodes de compression votre navigateur supporte pour que les données soient plus petites lors de leur transmission via Internet.
  • Cookies : Ces données sont envoyées au serveur pour aider à mémoriser vos informations (voir la tâche sur les cookies pour plus de détails).

En-têtes de réponse généraux

Ces en-têtes sont renvoyés par le serveur au client après la requête.

  • Configurer-cookie : Cela stocke des informations qui seront retournées au serveur web avec chaque requête (voir la tâche sur les cookies pour plus de détails).
  • Contrôle-cache : Combien de temps le contenu de la réponse sera stocké dans le cache du navigateur avant de faire une nouvelle requête.
  • Type-de-contenu : Cela indique au client quel type de données sont renvoyées, par exemple HTML, CSS, JavaScript, images, PDF, vidéos, etc. Grâce à l'en-tête Type-de-contenu, le navigateur sait comment traiter les données.
  • Encodage-du-contenu : Cela indique quelle méthode a été utilisée pour compresser les données lors de leur transmission via Internet pour qu'elles soient plus petites.

Cookies

Linux

echo affiche le texte que nous lui fournissons

utilisateur@serveur-linux:~$ echo "Bonjour Ami!"
Bonjour Ami!

whoami permet de trouver le nom d'utilisateur avec lequel nous sommes connectés

utilisateur@serveur-linux:~$ whoami

ls liste le contenu d'un répertoire

utilisateur@serveur-linux:~$ ls
'Fichiers Importants' 'Mes Documents' Notes Images

cat affiche le contenu d'un fichier texte

utilisateur@serveur-linux:~/Documents$ cat tache.txt
Voici quelque chose d'important pour moi de faire plus tard!

pwd donne le chemin complet du répertoire "Documents"

utilisateur@serveur-linux:~/Documents$ pwd
/home/utilisateur/Documents

find permet de rechercher des fichiers

find -name motsdepasse.txt recherche ce fichier spécifique

utilisateur@serveur-linux:~$ find -name motsdepasse.txt
./dossier1/motsdepasse.txt

find -name *.txt recherche tous les fichiers ayant cette extension

utilisateur@serveur-linux:~$ find -name *.txt
./dossier1/motsdepasse.txt
./Documents/tache.txt

grep nous permet de rechercher dans le contenu des fichiers une valeur spécifique

Par exemple, prenons les journaux d'accès d'un serveur web. Dans ce cas, un fichier access.log d'un serveur web contient 244 entrées.

utilisateur@serveur-linux:~$ wc -l access.log
244 access.log

Utiliser une commande similaire ici serait inefficace. Par exemple, si nous voulons rechercher dans ce fichier journal pour voir quel utilisateur/adresse IP a consulté quel contenu ? Rechercher une valeur spécifique dans 244 entrées serait inefficace. cat

Nous pouvons utiliser grep pour rechercher toute entrée dans le fichier qui contient la valeur que nous recherchons. À titre d'exemple, prenons les jounraux d'accès d'un serveur web et supposons que nous voulons voir tout le contenu consulté par l'adresse IP "81.143.211.90" (notez que c'est fictif).

utilisateur@serveur-linux:~$ grep "81.143.211.90" access.log
81.143.211.90 - - [25/Mar/2021:11:17 + 0000] "GET / HTTP/1.1" 200 417 "-" "Mozilla/5.0 (Linux; Android 7.0; Moto G(4))"

touch crée un fichier mkdir crée un répertoire

utilisateur@serveur-linux2:~$ touch note
utilisateur@serveur-linux2:~$ ls           
dossier1 note
utilisateur@serveur-linux2:~$ mkdir monrepertoire
utilisateur@serveur-linux2:~$ ls           
dossier1 monrepertoire note

rm supprime un fichier -R supprime un répertoire

utilisateur@serveur-linux2:~$ rm note
utilisateur@serveur-linux2:~$ ls           
dossier1 monrepertoire
utilisateur@serveur-linux2:~$ rm -R monrepertoire
utilisateur@serveur-linux2:~$ ls           
dossier1

cp copie un fichier existant dans un nouveau fichier. Dans l'exemple ci-dessous, nous copions "note" dans "note2"

utilisateur@serveur-linux2:~$ cp note note2
utilisateur@serveur-linux2:~$ ls           
dossier1 note note2

mv déplace des fichiers et des répertoires. Il nécessite deux paramètres, comme la commande cp. Cependant, il ne copie ni ne crée de nouveaux fichiers, mais fusionne ou modifie le fichier que nous avons spécifié comme deuxième paramètre. Vous pouvez non seulement déplacer un fichier vers un nouveau répertoire, mais aussi le renommer ou renommer un répertoire. Par exemple, dans l'exemple ci-dessous, nous renommons le fichier "note2" en "note3". "Note3" possèdera maintenant le contenu de "Note2".

utilisateur@serveur-linux2:~$ mv note2 note3
utilisateur@serveur-linux2:~$ ls           
dossier1 note note3

file détermine le type de fichier

utilisateur@serveur-linux2:~$ file note
note: texte ASCII

nano crée ou édite un fichier

scp permet de copier des fichiers et des répertoires entre systèmes Linux

Pour transférer un fichier depuis l'ordinateur local vers le serveur
scp [chemin du fichier local] [nom d'utilisateur du serveur]@[adresse du serveur]:[chemin du fichier sur le serveur]
scp /Users/mac_pc/Bureau/test.png root@192.168.1.1:/root

Pour transférer un fichier du serveur vers l'ordinateur local
scp [nom d'utilisateur du serveur]@[adresse du serveur]:[chemin du fichier sur le serveur] [chemin du fichier local]
scp root@192.168.1.1:/data/wwwroot/par_defaut/111.png /Users/mac_pc/Bureau

python3 -m http.server

Lance rapidement un serveur HTTP léger pour le développement local ou le partage de fichiers temporaires

Fonctionnalités principales : écoute sur un port spécifié, fournit un service de fichiers statiques.
Cas d'utilisation courants :
prévisualisation locale des pages pendant le développement front-end
partage temporaire des fichiers dans un répertoire

Risque d'exposition de répertoire : le serveur expose tous les fichiers du répertoire actuel

Étiquettes: HTTP Linux commandes linux Protocoles Web Codes d'état HTTP

Publié le 23 septembre à 19h26