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