Dans la leçon précédente, nous avons présenté les fonctions des programmes CGI. Aujourd'hui, nous entrons dans : Partie 2, le concept de programmation CGI. Le contenu de cette conférence constitue la base d'une compréhension approfondie des programmes CGI.
Cette série de conférences utilise Delphi pour écrire des programmes CGI. Pour ce contenu, Delphi a été encapsulé dans ses cours. Vous pensez peut-être que cette conférence est inutile. Mais je pense que l'un des avantages de CGI est qu'il existe de nombreux langages de développement disponibles (cette question sera mentionnée ci-dessous), et le contenu de cette conférence peut être utilisé dans n'importe quel langage de programmation (y compris Delphi). Par conséquent, pour tirer parti de CGI, le contenu de ce cours est toujours nécessaire. De plus, le contenu de ce cours constitue la base d'une compréhension approfondie des programmes CGI.
2. Spécifications CGI :
Typiquement, un serveur WEB est un ordinateur puissant, mais il est impossible d’en exploiter toute la puissance de traitement. L'émergence de CGI permet aux utilisateurs d'utiliser la puissance de traitement du serveur WEB pour fournir un contenu intéressant et dynamique aux clients distants. La spécification CGI s'applique aux serveurs WEB et aux applications fonctionnant sur le WEB. Il ne fait pas partie du protocole HTTP, mais la plupart des serveurs WEB supportent cette spécification, comme NCSA httpd, CERN httpd, Apache httpd, IIS et l'OmniHTTPD que nous utilisons.
2.1, Présentation de CGI
CGI définit un ensemble de règles qui sont suivies dans l'interopérabilité entre les serveurs WEB, les navigateurs et les applications. Par exemple, interrogez le système de base de données distant via un navigateur WEB :
2.2. Langue :
Les programmes CGI peuvent être écrits dans n'importe quel langage pouvant être exécuté sur le serveur WEB. Vous devez choisir la langue que vous connaissez le mieux et la mieux adaptée à votre emploi actuel. Par exemple : le langage Perl convient au traitement des chaînes et des fichiers, C est plus adapté aux programmes volumineux et complexes, Visual Basic et Delphi conviennent au traitement des bases de données, etc. Les langages de programmation CGI suivants sont couramment utilisés :
C
C++
Perl
Tcl
Python
Scripts shell
Visual Basic
Delphes
Applescript
2.3, méthode CGI :
La façon d’appeler CGI s’appelle une méthode CGI. Il existe trois méthodes CGI principales :
2.3.1, méthode GET :
La méthode GET est la méthode utilisée par le navigateur pour effectuer une requête au serveur WEB. Lors de l'utilisation de cette méthode, le programme CGI obtient les données de la variable d'environnement QUERY_STRING. Afin d'obtenir les paramètres d'entrée, le programme CGI doit analyser cette variable d'environnement. Lorsque les données à transmettre sont très longues, la méthode POST doit être utilisée.
2.3.2, méthode POST :
Lors de l'utilisation de la méthode POST, les programmes CGI obtiennent les données d'entrée de stdin (entrée standard). Puisqu'il n'y a pas d'EOF (End Of File) à la fin des données d'entrée, le programme CGI doit utiliser la valeur de la variable d'environnement CONTENT_LENGTH afin de lire correctement les données d'entrée. Le plus grand avantage de l'utilisation de cette méthode est qu'elle peut transmettre une grande quantité de données, tandis que la méthode GET ne peut pas transmettre une grande quantité de données en raison de la limitation de la longueur de l'URL (généralement pas plus de 1 024 octets). Pour le moment, la méthode POST est la seule option.
2.3.3, méthode HEAD :
La méthode HEAD est fondamentalement la même que la méthode GET, sauf qu'elle transmet les données du serveur WEB au navigateur. De plus, seules les informations d'en-tête HTTP sont transmises.
2.4. Spécifications des interfaces :
Ce qui suit présentera les quatre principales méthodes permettant aux serveurs WEB de communiquer avec les programmes CGI : variables d'environnement, ligne de commande, entrée standard et sortie standard. (Basé sur CGI version 1.1)
2.4.1. Variables d'environnement :
AUTH_TYPE : Si le serveur prend en charge les accusés de réception et que le script est protégé, donne le type d'accusé de réception.
CONTENT_LENGTH : Donne la longueur des données transmises via la méthode POST en octets. La variable est vide lors de l'utilisation de la méthode GET.
CONTENT_TYPE : Donne le type MINE des données transmises lors de l'utilisation de la méthode POST. La variable est vide lors de l'utilisation de la méthode GET. Tel que : application/x-www-form-urlencoded.
GETWAY_INTERFACE : indiquez le nom de la spécification CGI et le numéro de version, par exemple : CGI/1.1.
PATH_INFO : donne les informations de chemin supplémentaires après le nom du programme CGI dans l'URL.
PATH_TRANSLATED : le chemin physique du programme CGI, généralement le répertoire racine WEB, le nom du script et des informations supplémentaires sur le chemin.
QUERY_STRING : informations après le caractère "?" dans l'URL. Cette variable d'environnement donne les données d'entrée lors de l'utilisation de la méthode GET.
REMOTE_ADDR : IP de l'ordinateur distant effectuant la demande.
REMOTE_HOST : nom de l'ordinateur distant effectuant la demande.
REMOTE_IDENT : Donne le nom d'utilisateur défini dans la RFC 931.
Remarque : La RFC 931 est le document faisant autorité sur Internet, décrivant la méthode de confirmation de l'identification des utilisateurs dans les connexions TCP. Documentation sur : http://sunsite.auc.dk/RFC/rfc/rfc931.html.
REMOTE_USER : donne le nom d'utilisateur autorisé du client faisant la demande.
REQUEST_METHOD : La méthode pour effectuer la requête, qui peut être GET, HEAD et POST.
SCRIPT_NAME : chemin virtuel pour exécuter le programme CGI, tel que : /cgi-bin/query.cgi.
SERVER_NAME : Le nom de domaine ou l'adresse IP de l'ordinateur exécutant le logiciel serveur WEB, tel que : www.chinabyte.com.
SERVER_PORT : Le numéro de port du serveur WEB, la valeur par défaut est 80.
SERVER_PROTOCOL : Le nom du protocole et le numéro de version utilisé par le serveur WEB, tel que : HTTPD/1.0.
SERVER_SOFTWARE : Le nom du serveur WEB qui exécute les programmes CGI. Le format est « nom du serveur/numéro de version », tel que : NCSA/1.5b5.
HTTP_ACCEPT : "Acccpect : ligne d'en-tête" envoyé par le client, correspondant au type MIME que le client peut gérer, au format "type/sous-type, type/sous-type, etc.", tel que : */*, image/ gif, image/jpeg.
HTTP_REFERER : Oui Referer : Le répertoire de la ligne d'en-tête, contenant l'URL du formulaire (Form) lors d'une requête CGI, telle que : http://www.chinabyte.com/register.form.
HTTP_USER_AGENT : nom du navigateur client qui a effectué la demande, tel que : Mozilla/1.2N (Windows ; I ; 32 bits).
Vous pouvez voir les variables d'environnement ci-dessus à l'aide du programme de démonstration de la leçon précédente.
2.4.2, ligne de commande :
La ligne de commande CGI n'est utilisée que lors d'une requête avec ISINDEX. Une requête ISINDEX est une requête spéciale comprise entre <ISINDEX> et <BASE HREP="..">. La ligne de commande peut prendre plusieurs paramètres.
2.4.3. Entrée standard :
Lors de l'utilisation de la méthode POST, le programme CGI récupère les données transmises depuis stdin. Comme mentionné précédemment, les valeurs des variables d'environnement CONTENT_TYPE et CONTENT_LENGTH doivent être utilisées. Ce qu'il convient de noter, c'est que l'URL dans les données est codée, par exemple les espaces sont remplacés par des signes plus, ~ est remplacé par %7E, etc.
2.4.4. Sortie standard :
Les programmes CGI envoient des données au navigateur via une sortie standard ou des commandes pouvant être interprétées par le serveur WEB. Les programmes CGI peuvent communiquer avec le navigateur via le serveur WEB et leurs noms de programme doivent commencer par "nph-", qui représente des informations d'en-tête non analysées. Le programme CGI est responsable de l'exactitude des informations d'en-tête HTTP renvoyées au navigateur.
Lorsqu'il n'utilise pas le programme nph, le serveur recherche trois en-têtes spéciaux que le CGI peut renvoyer :
Type de contenu : informations d'en-tête de type MIME, telles que : Lors de la saisie de code HTML, "Content-type:text/html" est couramment utilisé.
Emplacement : indiquez au serveur que vous pointez vers un autre document. Le serveur redirige le client ou envoie le contenu du document, selon que l'URL est un chemin complet ou un chemin relatif.
Statut : La ligne d'état envoyée par le serveur au client. Le format est le suivant : nnnXXXXX, nnn est un code à trois chiffres et XXXXX est le texte de description correspondant.