Aller au contenu

Principes du web Langages serveur

Coté serveur (back-end), il n’y a pas de contraintes de langages. L’environnement est beaucoup plus libre, et surtout il est entièrement maitrisable. Quelques tâches importantes réalisées sur serveur :

  • servir les ressources statiques
  • générer dynamiquement des documents textes (HTML, JSON, etc.)
  • interroger des base de données
  • gérer les authentifications
  • effectuer des requêtes sur un autre serveur
  • etc.

Note

Pour ce cours, les langages utilisés seront :

  • PHP pour sa simplicité de mise en place et d’intégration
  • JavaScript (Node.js) pour son interopérabilité avec… JavaScript (coté client)

Apache + PHP#

C’est l’une des configurations les plus simples et disponibles avec beaucoup d’offres d’hébergement. C’est ce que proposent des outils comme MAMP ou EasyPHP pour le développement local.

Par défaut, Apache met en correspondance de manière automatique les fichiers hébergés avec l’URL active. Ainsi, http://localhost/tmp/page.html effectue une requête HTTP vers le fichier page.html du dossier tmp depuis la racine du site web.

La config d’Apache se fait au niveau du fichier httpd.conf :

  • gestion du Document Root (racine de votre site web)
  • gestion des droits d’accès
  • chargement de modules complémentaires (redirection, etc.)
  • création d’alias, de virtual hosts
  • choix de version de PHP (5.5, 7+)

Note: Il est également possible de créer un fichier .htaccess à la racine d’un site web. Celui-ci contiendra les règles à appliquer pour ce site en particulier.

Pour configurer PHP, voir la partie Configuration.

Python#

Plusieurs modules de Python 3 permettent de créer un serveur web: http.server, BaseHTTPServer. Contrairement à Apache, il est nécessaire de gérer soit-même les URLs et les retours serveurs (ressources ciblées, code d’erreur, etc.). Il est donc conseillé d’utiliser des frameworks, comme Django ou Flask.

Exemple d’une configuration Flask

# Fichier app.py
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    render_template('index.html')

Lancement du serveur

# Linux
$ env FLASK_APP=app.py flask run

# Windows
set FLASK_APP=app.py
python -m flask run

# Go to http://localhost:5000

Node.js#

Node.js est une plate-forme de développement serveur en JavaScript. Node.js propose une programmation évènementielle non bloquante, ce qui permet de créer des applications temps-réel, tout en mutualisant le code JS entre client et serveur.

De la même façon qu’en Python, il est nécessaire de gérer soit-même les URLs et les retours serveur.

Exemple d’un serveur web en Node.js (qui renvoit toujours le fichier index.html)

// Fichier app.js
var fs   = require('fs');
var http = require('http').createServer((req, res) => {
  fs.readFile(__dirname + '/index.html', (err, data) => {
    if (err) {
      res.writeHead(500);
      return res.end('Error loading index.html');
    }
    res.writeHead(200);
    res.end(data);
  });
}).listen(80);
$ node app.js

Les frameworks pour simplifier toute cette partie : Express, Fastify ou encore Koa