Lorsque l'on entend le mot "serveur", il est parfois difficile de comprendre exactement de quoi on parle en tant que débutant, car oui, un serveur peut désigner à la fois une machine ou un logiciel, ce qui provoque une certaine confusion lorsque l'on débute.

Première chose : Lorsque l'on parle de serveur web, on parle de la partie software, du logiciel, et non pas de la machine !

Un serveur web simple

Je ne vais pas expliquer en profondeur comment fonctionne le web, mais pour comprendre le rôle d'un serveur web, il faut connaitre ses deux technologies primaires :

Le protocole HTTP (HyperText Transfert Protocol) et le langage HTML (HyperText Markup Language).

Le web s'est construit sur ces deux technologies, en plus du réseau Internet mais que je n'évoquerais pas ici.

Si l'histoire d'Internet vous intéresse, je vous invite à lire mon article à ce sujet !

Le web primaire fonctionne donc comme ceci : Un visiteur demande une ressource en envoyant une requête HTTP (ex: GET https://example.com) et reçoit en retour la ressource demandée sous la forme d'un document HTML.

En définitive, on appelle un serveur web tout logiciel capable de recevoir et d'interpréter une requête HTTP afin de retourner une réponse qui contiendra un document HTML.

Même si aujourd'hui un serveur web est aussi capable de renvoyer d'autres fichiers comme des images, des vidéos, du son ou même des données brutes, ce sont des fonctionnalités supplémentaires sans lesquels on parle quand même de serveur web.

Attention, il ne faut pas confondre la fonction du serveur web et des scripts serveurs, écris par exemple en PHP !

On utilise PHP pour scripter le comportement du serveur afin que les données renvoyées soient dynamiques, mais la partie logicielle qui gère les requêtes entrantes reste le serveur web (Apache par exemple), qui les transfert à PHP qui se chargera d’exécuter les scripts voulus.

Quel langage pour développer un serveur web ?


Il est bien sûr possible d'écrire un serveur web avec la majorité des langages de programmation, la seule contrainte étant d'être en mesure d'ouvrir une connexion TCP/IP (sur laquelle le protocole http est basé) et d'écouter dessus.

Il est même possible d'écrire un serveur web pour le coup entièrement en PHP par exemple, comme expliqué dans cet article : http://station.clancats.com/writing-a-webserver-in-pure-php/

En général on privilégie les langages bas-niveaux pour leur performance, c'est d'ailleurs pour cela qu'Apache et Ngnix sont écrits en C, mais on trouve aussi des serveurs écrits en Java (comme Tomcat) ou même en Javascript grâce à NodeJS.

A noter qu'ExpressJS n'est pas un serveur web mais un "framework" d'applications web basé sur le module "http" fourni en NodeJS et grâce auquel il est possible de monter un serveur web basique en quelques lignes de code comme ceci:

const http = require('http');
let server = http.createServer(function(request, response){
	response.writeHead(200, {'Content-Type': 'text/html'});
    response.end('');
});
server.listen(80);

Vous aurez donc compris qu'il est possible de monter un serveur web avec n'importe quel langage !

A noter qu'encore aujourd'hui, plus de 80% des sites disponibles sur le web sont hébergés sur des serveurs Apache ou Ngnix et que NodeJS ne représente que 0.1% des sites web.

En plus !

"Est-ce qu'un serveur web doit forcément être relié à Internet ?"

Non, en fait parler de "serveur web" est une déformation, nous devrions plutôt parler de serveurs HTTP, la dénomination d'Apache est d'ailleurs celle-là : "The Apache HTTP Server Project".

"Un serveur qui renvoie toute sorte de fichier suite à une requête http est-il forcément un serveur web ?"

Non, ça peut être tout simplement d'un serveur de fichier (comme Samba par exemple), on attend d'un serveur web qu'il renvoie les fichiers avec les bonnes en-têtes et les types MIME qui permettront au navigateur (ou client) web de les interpréter de la bonne manière (affichage, ou téléchargement par exemple).

"Pourquoi parle-t'on de serveur ?"

Le terme vient de l'anglais "to serve" qui correspond au verbe "servir" (et non pas "serveur" qui se dit "waiter). Il y aurait une corrélation entre le fait que l'on envoie des demandes (comme des tickets) et que l'on doive attendre le retour de nos demandes les unes après les autres (pas forcément dans le bon ordre d'ailleurs).

J'espère que cet article vous aura plus, et à bientôt sur le blog !

À propos de l'auteur

Hello, je suis Nicolas Brondin-Bernard, ingénieur web indépendant depuis 2015 passionné par le partage de d'expériences et de connaissances.

Aujourd'hui je suis aussi coach pour développeurs web juniors, tu peux me contacter sur nicolas@brondin.com, sur mon site ou devenir membre de ma newsletter pour ne jamais louper le meilleur article de la semaine et être tenu au courant de mes projets !


Photo by Bimo Luki on Unsplash