Format d'échange
des messages entre client et serveur
|
 |
------------------------- début LIPE-RFC-0-4-a-----------------------
LIPE-RFC-N° : 0-4
Status : Provisoire rev. a
Date : 25-10-99
Auteurs : Bernard Frit
Reference : RFC 2068 (HTTP/1.1)
Sujet : Format d'échange des messages entre client et serveur
Mots Clés : RFC, LIPE, LIPE-RFC, spécifications, architecture,
implémentation, répertoires, protocole de transport,
Apache, HTTP
Destinataires : Architecture,
Contenu :
Descriptif du Format des Messages Echangés entre Client et Serveur
==================================================================
Le format des messages est basé sur un sous-ensemble de la norme internet
HTTP/1.1 décrite dans le RFC 2068.
Le sous-ensemble retenu correspond à la méthode POST formatté selon
le type de contenu (Content-type) multipart/form-data pour les
messages dans le sens client vers serveur. Ce type de contenu
correspond à un message structué en plusieures parties et contenant
des données provenant d'un formulaire.
Dans le cas des messages dans le sens serveur vers client, le même
type de contenu est retenu.
Les messages du client vers le serveur sont appelés des requêtes;
les messages du serveur vers le client sont appelés des réponses;
il s'agit là de la dénomination officielle en HTTP/1.1.
Requêtes client vers serveur
============================
Le format ou le type de contenu retenu à savoir le
Content-type: multipart/form-data permet de structurer les
requêtes vers le serveur en autant de parties que nécessaire.
Le contenu de chaque partie est totalement libre et n'est
absolument pas vérifié par Apache qui se charge de le transmettre
tel quel à l'URL demandé.
La séparation du message en plusieurs parties permet d'envoyer
des informations à destination du serveur dans la première partie
puis des informations à différents modules dans chacune des parties
suivantes.
o En-tête de la requête Header.
Nom de la ligne Obligat.(1) Descritif
-------------------------------------------------------------------
Request-line OUI Composé de :
Method (ici toujours POST)
Espace
URI (uniform ressource identifier)
Espace
HHTP-version (ici toujours HTTP/1.1)
CR-LF
Connection NON Ici toujours égal à :
Connection: Keep-Alive
User-Agent NON Nom du programme client par ex:
User-Agent: LIPE Client v1.6.2 Linux 2.2.25
Host OUI Machine sur laquelle tourne le serveur ex:
Host: lipe_server.lipe.com
Content-type OUI Ici toujours égal à :
Content-type: multipart/form-data
boundary NON(2) Indique le séparateur entre les différentes
parties du message. Il peut être intéressant
d'utiliser le séparateur pour identifier
la transaction et donc le séparateur serait
structuré ainsi :
------
par ex : boundary=-----56885689-1
Content-length NON Indique la longueur en octets de la requête
peut être utile afin de faire un contrôle, mais
ne doit pas être bloquant si inexistant.
ex : Content-length: 725
CRLF OUI La fin de l'en tête est marquée par une ligne
blanche.
Notes :
~~~~~~~
(1) Il s'agit ici de ce qui est obligatoire pour HTTP/1.1
(2) boundary peut-être omis; à ce moment là, la ligne qui suit
la fin de l'en tête est considérée comme séparateur.
o Corps de la requête Body : partie destinée au serveur
Nom de la ligne Obligat.(1) Descritif
-------------------------------------------------------------------
boundary OUI Séparateur de partie
ex : -----56885689-1
Content-Disposition NON Permet de donner un nom à la
partie; par ex:
Content-Disposition: form-data; name="lipe_header"
Session ***(2) Spécifique à LIPE, c'est le numéro de
session attribué par LIPE au login
Ex: Session: 56885689
Transaction *** Spécifique à LIPE, c'est le numéro de
transaction incrémenté à chaque requête.
Ex: Transaction: 1
Date *** Spécifique à LIPE, c'est la date système
du client au format date système unix.
Ex: Date: 31256
Time *** Spécifique à LIPE, c'est l'heure système
du client au format heure système unix.
Ex: Time: 12565
User *** Spécifique à LIPE, c'est l'utilisateur LIPE
tel qu'identifié au Login.
ex : User: Bernard
Module *** Spécifique à LIPE, c'est le module LIPE
auquel il faut transmettre les datas.
ex : Module: Saisie_Compta (3).
Notes :
~~~~~~~
(1) Il s'agit ici de ce qui est obligatoire pour HTTP/1.1
(2) Les *** indiquent qu'il s'agit là d'une ligne spécifique à LIPE
(3) Cette ligne peut-être répétée autant de fois qu'il y a de module
auquel envoyer des datas.
o Corps de la requête Body : partie destinée au module
Nom de la ligne Obligat. Descritif
-------------------------------------------------------------------
boundary OUI Séparateur de partie
ex : -----56885689-1
Content-Disposition NON Permet de donner un nom à la
partie; par ex:
Content-Disposition: form-data; name="lipe_datas_1"
Module *** Spécifique à LIPE, c'est le module LIPE
auquel il faut transmettre les datas.
ex : Module: Saisie_Compta.
Datas *** Spécifique à LIPE, il s'agit des datas
à transmettre au module spécifié.
Le format des datas est spécifique
à chaque module. Par ex :
Datas:
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
etc...
Exemple :
---------
Saisie d'une écriture (simplifié) envoi du message depuis
le client vers le serveur. Voici ce que le client envoie :
POST /lipe/bin/lipe_server HTTP/1.1
Connection: Keep-Alive
User-Agent: LIPE Client v1.6.2 Linux 2.2.25
Host: lipe_server.lipe.com
Content-type: multipart/form-data;
boundary=-----56885689-277
Content-Length: xxxx
-----56885689-277
Content-Disposition: form-data; name="lipe_header"
Session: 56885689
Ordre: 277
User: Bernard
Date: 31256
Time: 12565
Module: Ajoute_Ecrit
-----56885689-277
Content-Disposition: form-data; name="lipe_datas_1"
Module: Ajoute_Ecrit
Datas:
411DUPON|Réglement Fac 2375|2350.25|C # N°Compte|Libellé|Montant|Sens
51201000|Réglement Fac 2375|2350.25|D # sans commentaire
-----56885689-277
Commentaire additionnel:
------------------------
POST /lipe/bin/lipe_server HTTP/1.1
Cette syntaxe suppose qu'il existe un fichier exécutable lipe_server
à http://lipe_server.chezmoi.fr/lipe/bin/lipe_server
On peut se contenter de
POST /usr/local/lipe/bin HTTP/1.1
Dès l'instant où il existe par exemple un fichier exécutable déclaré dans
la config d'Apache et associé à toute requête sur /usr/local/lipe/bin.
Réponse serveur vers client
===========================
--------------- fin LIPE-RFC-0-4-a-----------------------