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-----------------------