HTTP http://www.w3.org/Protocols/ http://www.rfc-editor.org/rfc/rfc2616.txt http://www.linuxfocus.org/English/May2000/article122.shtml Exemple minimal: On se connecte à un serveur Web telnet www 80 On lance une commande (suivie de deux retours chariot) GET / HTTP/1.0 Le serveur renvoie un en-tête (terminé par une ligne blanche) HTTP/1.1 200 OK Date: Thu, 03 Aug 2000 07:44:21 GMT Server: Apache/1.3.12 (Unix) Last-Modified: Thu, 02 Mar 2000 14:58:00 GMT ETag: "ac814-2e8-38be8178" Accept-Ranges: bytes Content-Length: 744 Connection: close Content-Type: text/html Puis le contenu du fichier demandé, ie, http://www/ Le même exemple, en Perl (man perlipc) : #!/usr/bin/perl -w use IO::Socket; unless (@ARGV > 1) { die "usage: $0 host document ..." } $host = shift(@ARGV); $EOL = "\015\012"; $BLANK = $EOL x 2; foreach $document ( @ARGV ) { $remote = IO::Socket::INET->new( Proto => "tcp", PeerAddr => $host, PeerPort => "http(80)", ); unless ($remote) { die "cannot connect to http daemon on $host" } $remote->autoflush(1); print $remote "GET $document HTTP/1.0" . $BLANK; while ( <$remote> ) { print } close $remote; } Exemple plus détaillé: Pour voir comment Netscape établit ses connections, créons un petit serveur (man perlipc) #! perl -w use IO::Socket; use Net::hostent; # for OO version of gethostbyaddr $PORT = 9000; # pick something not in use $server = IO::Socket::INET->new( Proto => 'tcp', LocalPort => $PORT, Listen => 1, #Listen => SOMAXCONN, Reuse => 1); die "can't setup server" unless $server; print "[Server $0 accepting clients]\n"; while ($client = $server->accept()) { while ( <$client>) { print ; } } Voici le résultat (toujours terminé par une ligne vide) GET / HTTP/1.0 Connection: Keep-Alive User-Agent: Mozilla/4.72 [fr] (X11; I; Linux 2.4.0-test5 i686) Host: localhost:9000 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */* Accept-Encoding: gzip Accept-Language: fr, en Accept-Charset: iso-8859-1,*,utf-8 ---------------------------------------------------------------------- Apache C'est le nom d'un serveur Web (l'exécutable s'appelle httpd) http://www.apache.org/httpd.html /etc/apache/ ---------------------------------------------------------------------- CGI Il est possible de configurer un serveur Web de manière qu'il exécute les fichiers *.cgi. Exemple : #!/bin/sh echo Content-type: text/plain echo env id pwd echo $PWD Exemple : #!/bin/perl -T -w # http://www.math.jussieu.fr/~zoonek/cgi-bin/cgi_test.cgi?toto=abc&tutu=def use CGI; $query = new CGI; print "Content-type: text/plain\n\n"; @names = $query->param; print "J'ai recu les paramètres suivants\n"; print join(' ', @names); print "\n\n"; print "Leurs valeurs étaient les suivantes\n"; foreach (@names) { print "$_ : " . $query->param($_) ."\n"; } ---------------------------------------------------------------------- SHTML server-parsed HTML files (*.shtml) http://webword.com/reports/ssi.html Exemples: Inclure un fichier : Afficher la date Remarque : Quand ces données ne sont pas dynamiques, cela ne présente aucun intérêt, au regard de l'augmentation de la charge du serveur : il vaut mieux écrire un petit programme qui génèrera les pages automatiquement, une fois pour toutes. ---------------------------------------------------------------------- ImageMaps On peut vouloir mettre différents liens dans une image. 1. En coupant l'image en morceaux et en lettant le résultat dans un tableau. 2. À l'aide de « server-parsed imagemaps » (à éviter -- quand cette possibilité n'est pas carrément desactivée) http://www.ihip.com/ 3. À l'aide d'un « client-side imagemap » http://www.ihip.com/cside.html Exemple 4. Il faut un logiciel pour trouver les coordonnées. http://www.ihip.com/tools.html (exercice facile : en écrire un en perl) ---------------------------------------------------------------------- FORM Formulaires (pour que le client envoie certaines informations au serveur : nom, adresse, numéro de carte bancaire, etc.) http://www.ukans.edu/~acs/docs/other/HTML_quick.shtml http://www.cc.ukans.edu/~acs/docs/other/forms-intro.shtml http://www.ncsa.uiuc.edu/General/Internet/WWW/HTMLPrimer.html http://www.w3.org/hypertext/WWW/MarkUp/MarkUp.html ---------------------------------------------------------------------- php Il est possible de mélanger du code (le langage ressemble un peu à Perl, mais ce n'est pas vraiment Perl) et du html. http://www.php.net/ ---------------------------------------------------------------------- Perl Apache permet de mélanger du Perl et du HTML. http://perl.apache.org/embperl/ En fait, mod_perl, permet d'écrire des modules, ie, des extensions d'Apache en Perl et l'une d'entre elles, EmbedPerl, permet de mélanger du perl et du HTML. http://perl.apache.org/ ---------------------------------------------------------------------- ASP Active Server Page Équivalent (par MiniMou) de php, le langage étant Perl ou VBasic. Il y a un module (en Perl) pour Apache qui reconnait ASP/Perl. http://www.nodeworks.com/asp/ L'intérêt par rapport aux scripts CGI, c'est qu'il est possible de suivre un visiteur : - on n'a pas à se préoccuper soi-même des cookies - tous les scripts lancés par un même utilisateur partagent certaines variables, qu'il n'est donc pas nécessaire d'écrire dans un fichier ou de passer (en clair) comme champs cachés d'un formulaire. ---------------------------------------------------------------------- Zope C'est un « environement de développement de site Web », qui mélange à la fois serveur Web et langage de programmation (Python). http://www.zope.org/ http://www.zope.org/Documentation/Guides http://weblogs.userland.com/zopeNewbies/ ---------------------------------------------------------------------- ht://dig outil d'indexation de site http://www.htdig.org/ http://www.math.jussieu.fr/cgi-bin/htsearch ---------------------------------------------------------------------- https Communications HTTP cryptées Si j'ai bien compris, ce sont des communications HTTP tout à fait normales (sans RIEN d'autre), le cryptage n'intervenant que dans une couche inférieure (SSL). Pour distinguer les deux, le numéro de port est différent. Pour avoir un serveur Web sécurisé, ie, reconnaissant https, il suffit de le lui dire lors de la compilation. http://www.modssl.org/example/ SSL Secure Set Layer Il y a un module Apcahe correspondant : http://www.modssl.org/ qui utilise la bibliothèque openSSL http://www.openssl.org/ TLS Transport Layer Security Remplacement de SSL (voir openSSL) X509 C'est la norme qui fixe le format des certificats, ie, les clefs publiques échangées lors d'une communication HTTPS ---------------------------------------------------------------------- Remarque : Sur www.math.jussieu.fr, tout a été desactivé (*.cgi dans les répertoires utilisateurs, shtml, etc.) Voici un extrait du /etc/apache/httpd.conf # # If you want to use server side includes, or CGI outside # ScriptAliased directories, uncomment the following lines. # # To use CGI scripts: # #AddHandler cgi-script .cgi # # To use server-parsed HTML files # #AddType text/html .shtml #AddHandler server-parsed .shtml # # If you wish to use server-parsed imagemap files, use # #AddHandler imap-file map # # To enable type maps, you might want to use # #AddHandler type-map var