Na palestra anterior, apresentamos as funções dos programas CGI. Hoje entramos na: Parte 2, o conceito de programação CGI. O conteúdo desta palestra é a base para uma compreensão aprofundada dos programas CGI.
Esta série de palestras usa Delphi para escrever programas CGI. Para este conteúdo, Delphi foi encapsulado em suas aulas. Mas acho que uma das vantagens do CGI é que existem muitas linguagens de desenvolvimento disponíveis (este assunto será mencionado a seguir), e o conteúdo desta palestra pode ser usado em qualquer linguagem de programação (inclusive Delphi). Portanto, para aproveitar as vantagens do CGI, o conteúdo desta palestra ainda é necessário, além disso, o conteúdo desta palestra é a base para uma compreensão aprofundada dos programas CGI;
2. Especificações CGI:
Normalmente, um servidor WEB é um computador poderoso, mas é impossível utilizar todo o poder de processamento. O surgimento do CGI permite que as pessoas utilizem o poder de processamento do servidor WEB para fornecer conteúdo interessante e dinâmico a clientes remotos. A especificação CGI se aplica a servidores WEB e aplicativos executados na WEB. Não faz parte do protocolo HTTP, mas a maioria dos servidores WEB suportam esta especificação, como NCSA httpd, CERN httpd, Apache httpd, IIS e o OmniHTTPD que usamos.
2.1, Visão Geral do CGI
O CGI define um conjunto de regras que são seguidas na interoperação entre servidores WEB, navegadores e aplicações. Por exemplo, consulte o sistema de banco de dados remoto através de um navegador WEB:
2.2. Idioma:
Os programas CGI podem ser escritos em qualquer linguagem que possa ser executada no servidor WEB. Você deve escolher o idioma com o qual está mais familiarizado e mais adequado ao seu trabalho atual. Por exemplo: a linguagem Perl é adequada para processamento de strings e arquivos, C é mais adequada para programas grandes e complexos, Visual Basic e Delphi são adequados para processamento de banco de dados e assim por diante. A seguir estão as linguagens de programação CGI comumente usadas:
C
C++
Perl
Tcl
Pitão
Scripts de shell
Visual Básico
Delfos
Applescript
2.3, método CGI:
A forma de chamar CGI é chamada de método CGI. Existem três métodos CGI principais:
2.3.1, método GET:
O método GET é o método usado pelo navegador para fazer uma solicitação ao servidor WEB. Ao utilizar este método, o programa CGI obtém dados da variável de ambiente QUERY_STRING. Para obter os parâmetros de entrada, o programa CGI deve analisar esta variável de ambiente. Quando os dados a serem transmitidos são muito longos, deve-se utilizar o método POST.
2.3.2, método POST:
Ao usar o método POST, os programas CGI obtêm dados de entrada do stdin (entrada padrão). Como não há EOF (End Of File) no final dos dados de entrada, o programa CGI deve utilizar o valor da variável de ambiente CONTENT_LENGTH para ler corretamente os dados de entrada. A maior vantagem de usar este método é que ele pode transmitir uma grande quantidade de dados, enquanto o método GET não pode transmitir uma grande quantidade de dados devido à limitação do comprimento da URL (geralmente não mais que 1.024 bytes). Neste momento, o método POST é a única opção.
2.3.3, método HEAD:
O método HEAD é basicamente igual ao método GET, exceto que transmite dados do servidor WEB para o navegador. Além disso, apenas as informações do cabeçalho HTTP são transmitidas.
2.4. Especificações da interface:
A seguir serão apresentados os quatro métodos principais para servidores WEB se comunicarem com programas CGI: variáveis de ambiente, linha de comando, entrada padrão e saída padrão. (Baseado em CGI versão 1.1)
2.4.1. Variáveis ambientais:
AUTH_TYPE: Se o servidor suportar confirmações e o script estiver protegido, fornece o tipo de confirmação.
CONTENT_LENGTH: Fornece o comprimento dos dados transmitidos usando o método POST em bytes. A variável fica vazia ao usar o método GET.
CONTENT_TYPE: Fornece o tipo MINE de dados transmitidos ao usar o método POST. A variável fica vazia ao usar o método GET. Tal como: aplicativo/x-www-form-urlencoded.
GETWAY_INTERFACE: Forneça o nome da especificação CGI e o número da versão, como: CGI/1.1.
PATH_INFO: fornece informações adicionais do caminho após o nome do programa CGI na URL.
PATH_TRANSLATED: O caminho físico do programa CGI, geralmente o diretório raiz da WEB, o nome do script e informações adicionais do caminho.
QUERY_STRING: as informações após o caractere "?" Esta variável de ambiente fornece os dados de entrada ao usar o método GET.
REMOTE_ADDR: O IP do computador remoto que faz a solicitação.
REMOTE_HOST: O nome do computador remoto que está fazendo a solicitação.
REMOTE_IDENT: Fornece o nome de usuário definido na RFC 931.
Nota: RFC 931 é o documento oficial da Internet, que descreve o método de confirmação da identificação de usuários em conexões TCP. Documentação em: http://sunsite.auc.dk/RFC/rfc/rfc931.html.
REMOTE_USER: Fornece o nome de usuário autorizado do cliente que fez a solicitação.
REQUEST_METHOD: O método para fazer a solicitação, que pode ser GET, HEAD e POST.
SCRIPT_NAME: O caminho virtual para executar o programa CGI, como: /cgi-bin/query.cgi.
SERVER_NAME: O nome de domínio ou endereço IP do computador que executa o software do servidor WEB, como: www.chinabyte.com.
SERVER_PORT: O número da porta do servidor WEB, o valor padrão é 80.
SERVER_PROTOCOL: O nome do protocolo e o número da versão utilizado pelo servidor WEB, como: HTTPD/1.0.
SERVER_SOFTWARE: O nome do servidor WEB que executa programas CGI. O formato é "nome do servidor/número da versão", como: NCSA/1.5b5.
HTTP_ACCEPT: "Acccpect: header line" enviado pelo cliente, correspondente ao tipo MIME que o cliente pode manipular, no formato "type/subtype, type/subtype, etc.", como: */*, image/ gif, imagem/ jpeg.
HTTP_REFERER: Sim Referer: O diretório da linha do cabeçalho, contendo a URL do formulário (Formulário) ao fazer uma solicitação CGI, como: http://www.chinabyte.com/register.form.
HTTP_USER_AGENT: O nome do navegador cliente que fez a solicitação, como: Mozilla/1.2N (Windows;I;32bit).
Você pode ver as variáveis de ambiente acima usando o programa de demonstração da aula anterior.
2.4.2, linha de comando:
A linha de comando CGI é usada apenas ao consultar com ISINDEX. Uma consulta ISINDEX é uma consulta especial entre <ISINDEX> e <BASE HREP="..">. A linha de comando pode receber vários parâmetros.
2.4.3. Entrada padrão:
Ao usar o método POST, o programa CGI obtém os dados transmitidos do stdin. Conforme mencionado anteriormente, os valores das variáveis de ambiente CONTENT_TYPE e CONTENT_LENGTH devem ser usados. O que deve ser observado é que o URL nos dados é codificado, como espaços são substituídos por sinais de mais, ~ é substituído por% 7E, etc.
2.4.4. Saída padrão:
Os programas CGI enviam dados ao navegador por meio de saída padrão ou comandos que podem ser interpretados pelo servidor WEB. Os programas CGI podem se comunicar com o navegador através do servidor WEB, e seus nomes de programas devem começar com “nph-”, que representa informações de cabeçalho não analisadas. O programa CGI é responsável pela exatidão das informações do cabeçalho HTTP retornadas ao navegador.
Quando não estiver usando o programa nph, o servidor procura três cabeçalhos especiais que o CGI pode retornar:
Tipo de conteúdo: informações de cabeçalho do tipo MIME, como: Ao inserir HTML, "Content-type:text/html" é comumente usado.
Localização: Informe ao servidor que você está apontando para outro documento. O servidor redireciona o cliente ou envia o conteúdo do documento, dependendo se a URL é um caminho completo ou relativo.
Status: A linha de status enviada pelo servidor ao cliente. O formato é: nnnXXXXX, nnn é um código de três dígitos e XXXXX é o texto de descrição correspondente.