Karrigell Documentation

Version 2.2.1 13 12 05

English

3. Le serveur Web

Le serveur web intégré est un serveur asynchrone, sur le même principe que les modules asyncore et asynchat de la distribution standard de Python. Pour autant que j'ai pu le tester, il est très efficace, avec des temps de réponse excellents (1)

3.1 Le Répertoire Racine

Le Répertoire Racine est l'endroit où placer les fichiers qui seront atteints au sommet de la hiérarchie des url ; si vous placez monfichier.htm dans ce répertoire, il sera appelé par http://hote/monfichier.htmhote est le nom d'hôte du serveur (localhost si vous travaillez en local)

A l'installation, le Répertoire Racine est le même que le Répertoire Serveur. Vous pouvez le modifier dans le fichier de configuration (cf 3.4)

3.2 Servir des fichiers statiques

Pour servir des fichiers "statiques" (pages HTML, images GIF ou JPEG, etc) tout ce qu'il y a à faire est de les créer en utilisant votre outil favori et de les sauvegarder dans le Répertoire Racine

Supposons que vous ayez créé un document HTML, monFichier.htm, et que vous l'ayez mis dans le Répertoire Racine. Lancez votre navigateur web préféré et entrez l'URL http://localhost/monFichier.htm ; vous devriez voir votre fichier s'afficher dans le navigateur

Si vous sauvegardez le fichier dans un sous-répertoire il faut ajouter son nom au début de l'URL. Si vous avez un fichier monImage.gif dans le sous-répertoire Images , son URL sera http://localhost/Images/monImage.gif

Pour atteindre des fichiers en-dehors du Répertoire Racine, utilisez les alias (cf 3.4)

Si on ne spécifie pas de nom de fichier et que l'url correspond à un répertoire, le serveur cherche dans ce répertoire s'il y a des fichiers de nom index.html, index.htm, index.py, index.pih, index.hip ou index.ks. S'il n'en trouve pas, il affiche la liste des sous-répertoires et des fichiers dans le répertoire ; s'il en trouve plus d'un, il déclenche une exception.

Si l'extension d'un fichier n'est pas spécifié, le serveur cherchera un fichier avec l'une des extensions html, htm, py, pih, hip ou ks. S'il en trouve un, il est utilisé ; s'il en trouve plus d'un, une exception est déclenchée ; s'il n'en trouve aucun, une exception est également déclenchée.

3.3 Options de ligne de commande


La ligne de commande est de la forme :

python Karrigell.py [-P port] [-S] [-D] [initFile]

  • port est le numéro de port HTTP (80 par défaut)
  • S spécifie le mode "silencieux". Par défaut, Karrigell affiche une trace pour chaque requête qu'il reçoit. Avec l'option -S rien n'est affiché
  • D donne à debug la valeur 1 (voir ci-dessous, dans "Fichier de configuration")
  • initFile est le fichier de configuration (voir ci-dessous). Par défaut c'est le fichier Karrigell.ini dans le répertoire du serveur

3.4 Le fichier de configuration

Les options de configuration sont définies dans un fichier de configuration. Par défaut il s'agit du fichier Karrigell.ini dans le répertoire du serveur. On peut définir un autre fichier dans la ligne de commande
Le fichier de configuration est divisé en plusieurs sections

[Directories]

root
Donnez à l'option root le nom du répertoire depuis lequel vous voulez servir des fichiers. A l'installation, cette option n'est pas initialisée et le répertoire est celui du serveur. Dans le reste de cette documentation ce répertoire sera appelé le Répertoire Racine
protected
une liste de répertoires "protégés" : pour chaque script dans ces répertoires, un script AuthentScript.py sera automatiquement exécuté en premier. Ce script AuthentScript.py doit être écrit par l'administrateur et placé dans le répertoire à protéger. Par défaut, seul le répertoire admin est protégé. Utilisez ";" pour en ajouter d'autres
allow_directory_listing
Si une url correspond à un répertoire dans lequel on ne trouve aucun fichier index, cette option détermine qui a l'autorisation de lire le contenu du répertoire :
  • all = tous les utilisateurs
  • none = aucun utilisateur

La valeur par défaut est "none"
[Applications]
Fait correspondre à des extensions de fichiers des types MIME ; autant que je sache ceci fonctionne avec Netscape, mais Internet Explorer écrase ces correspondances avec ses propres paramètres
[Alias]
On peut associer un alias à un chemin dans le système de fichier. Par exemple, si vous créez cet alias : scripts=c:\Mes documents\Scripts Karrigell, alors l'url htpp://localhost/scripts/index.htm cherchera le fichier c:\Mes documents\Scripts Karrigell\index.htm
[Server]
port
L'option port permet de changer le port HTTP (80 par défaut)
debug
L'option debug spécifie un niveau de débogage. Avec la valeur 1, les modules importés sont rechargés à chaque import. Ceci évite d'avoir à relancer le serveur à chaque fois qu'une modification est apportée à un script importé
silent
Si on donne la valeur 1 à l'option silent, rien n'est imprimé sur la fenêtre de console
gzip
Si l'option gzip a la valeur 1, et que le client supporte l'encodage gzip (c'est le cas de la plupart des navigateurs), le serveur comprime les données envoyées au client. ceci réduit l'occupation du réseau, mais ralentit un peu le serveur
global
Dans l'option global, vous pouvez spécifier le chemin des modules qui doivent être importées dans chaque script exécuté par Karrigell. Si vous avez une ligne comme
global=%(base)s/monScript.py;%(base)s/monScript1.py
alors les modules monScript et monScript1 seront disponibles dans l'espace de noms de tous les scripts
ignore
Une liste d'urls à ignorer si elles ne sont pas trouvées (renvoie le code HTTP 204 au lieu de 404). Sert par défaut à ignorer l'url /favicon.ico, recherchée par la plupart des navigateurs
[Translation]
Specifie la langue utilisée dans l'application, indépendamment des options définies dans le navigateur. Faites lang=default si vous ne voulez pas de traduction, lang=en si vous voulez une traduction en anglais, etc

Une variable base est initialisée par Karrigell avant le chargement du fichier de configuration, sa valeur est le répertoire serveur. Voir un exemple de son utilisation par %(base)s/ dans le fichier par défaut Karrigell.ini

[VirtualHost nom:port]

Karrigell prend en charge la notion d'hôte virtuel, qui permet de servir plusieurs hôtes de noms différents sur le même serveur

Pour spécifier un hôte virtuel vous devez ajouter une ligne comme celle-ci dans le fichier de configuration :

[VirtualHost nom[:port]]

nom est le nom de l'hôte (comme www.test.org) et port est le numéro de port (80 par défaut)

Vous devez spécifier un répertoire depuis lequel les requêtes à cet hôte seront servies :

root = /web/monrep

(1) vous pouvez aussi vous servir d'un autre serveur web intégré, basé sur les modules SocketServer, BaseHTTPServer et SimpleHTTPServer de la distribution standard Python : faites python Karrigell_SocketServer.py

Si vous préférez un serveur multi-thread utilisez python Karrigell_ThreadedSocketServer.py