Correction du doctype

Palaiseau, le 23 janvier 2020

Cher journal,

Pour la première fois depuis longtemps, j'ai un peu de temps libre. Autant en profiter pour corriger la directive doctype en tête des pages auto-indexées. Dans le serveur Apache d'origine, le doctype employé est celui de la norme HTML 3.2, qui date du début des années 90. La rustine est la suivante:

--- apache2-2.4.41.orig/include/httpd.h
+++ apache2-2.4.41/include/httpd.h
@@ -248,6 +248,8 @@ extern "C" {
 #define DOCTYPE_HTML_4_0F "<!DOCTYPE HTML PUBLIC \"-//W3C//" \
                           "DTD HTML 4.0 Frameset//EN\"\n" \
                           "\"http://www.w3.org/TR/REC-html40/frameset.dtd\">\n"
+/** HTML 5 experimental Doctype **/
+#define DOCTYPE_HTML      "<!doctype html>\n"
 /** XHTML 1.0 Strict Doctype */
 #define DOCTYPE_XHTML_1_0S "<!DOCTYPE html PUBLIC \"-//W3C//" \
                            "DTD XHTML 1.0 Strict//EN\"\n" \
--- apache2-2.4.41.orig/modules/generators/mod_autoindex.c
+++ apache2-2.4.41/modules/generators/mod_autoindex.c
@@ -179,7 +179,7 @@ static void emit_preamble(request_rec *r
                   " <head>\n  <title>Index of ", title,
                   "</title>\n", NULL);
     } else {
-        ap_rvputs(r, DOCTYPE_HTML_3_2,
+        ap_rvputs(r, DOCTYPE_HTML,
                   "<html>\n <head>\n"
                   "  <title>Index of ", title,
                   "</title>\n", NULL);

Pour dégrossir un peu ce mélange de langage patch et de C, voici un résumé des changements apportés, qui sommes toutes ne cassent pas trois pattes à un canard.

Le premier changement, dans le fichier include/httpd.h consiste à ajouter la défintion d'une macro DOCTYPE_HTML contenant la chaîne de caractères correspondant au niveau 5 de la version, apparemment toujours expérimentale, du HTML. C'est le fameux <!doctype html>.

Le second changement, dans le fichier modules/generators/mod_autoindex.c, consiste simplement à remplacer l'appel à la macro DOCTYPE_HTML_3_2 par DOCTYPE_HTML dans le code qui sert à engendrer la page contenant l'index des fichiers. Il aurait aussi été possible de remplacer la macro directement par la chaine de caractères "<!doctype html>\n", ce qui aurait évité de faire des modifications dans le fichier d'en-tête httpd.h. La véritable solution propre serait de discuter de l'intégration du HTML 5, si c'est effectivement considéré comme utile, avec l'équipe de développement chez Apache en charge de la maintenance du module autoindex. Au pire, le patch ici présent peut servir de démonstrateur.

Après application du patch et installation des binaires ainsi modifiés, le rendu des pages a légèrement changé, tout du moins avec le navigateur Firefox 68 ESR. Certaines marges sont apparues avant le titre des pages, et à l'intérieur des tableaux, qui sont donc devenus plus grands. Ce changement de comportement est normal, le navigateur ne suit plus la même norme, et cesse par la même occasion de jouer aux devinettes quand une balise inconnue en HTML 3.2, mais pas en HTML 5, est rencontrée. Ça a été l'occasion de revoir le fichier de style, afin d'apporter les ajustements nécessaires.

[ICO]NameLast modifiedSize
[PARENTDIR]Parent Directory  -

  —