Anterior Home Page Sumário E-Mail Próximo

  • Conceitos básicos
  • Ao desenvolver aplicativos ISAPI ou CGI, é necessário compreender claramente os mecanismos de funcionamento dessas interfaces de programação. Todos os problemas encontrados na utilização da OPUSWEB se relacionam, direta ou indiretamente, com o desconhecimento dos padrões e mecanismos CGI e/ou ISAPI.

    Por isso, a compreensão destes assuntos constitui requisito básico para desenvolver scripts, programas, extensões ou filtros para servidores Web.

    Abordamos, inicialmente, alguma idéias básicas a respeito dos seguintes assuntos:

      1. O modelo Internet (cliente/servidor).
      2. O cliente ("Browser", "User Agent")
      3. O servidor (Web Server / HTTP Server)
      4. O protocolo (HTTP - Hypertext transfer protocol)

      1. O modelo Web cliente/servidor

      Os serviços da plataforma Web estão baseados no modelo cliente/servidor, que permite distribuir e compartilhar os seus componentes básicos, ou seja, a interface com o usuário, a lógica dos programas e os dados.

      No modelo cliente/servidor, o cliente:

      No modelo cliente/servidor, o servidor:

      Nos modelos tradicionais, os clientes e os servidores são classificados de "magros" ou "gordos". Estes termos indicam mais uma relação funcional do que características físicas. Trata-se de uma divisão do trabalho ditada pelo perfil do próprio aplicativo. Por exemplo, é bastante freqüente que o servidor seja otimizado para fornecer dados a múltiplos clientes e, usualmente, a aplicação cliente é otimizada para, apenas, interagir com o usuário final.

      O servidor é "gordo" quando toda a lógica funcional reside nele. Este é, ainda, o modelo mais comum na Web. O cliente "magro" é, usualmente, um Browser, que fornece apenas a interface com o usuário. Ou seja, as aplicações CGI ou ISAPI fornecem a lógica funcional dentro do servidor HTTP e o cliente apenas exibe os dados. Existem outros modelos cliente / servidor, com serviços distribuídos. Neste caso, as atividades são compartilhadas entre cliente e servidor.

      1. O cliente ("User Agent")
      2. Os clientes Web são também chamados "User agents" ou, simplesmente, Browsers. No passado, por serem os Browsers meras interfaces com o usuário, o modelo era "servidor gordo, cliente magro". Contudo, atualmente, existem tecnologias (por exemplo, Applets, Client-side Scripts, Style Sheets, plug-ins ...) que permitem maior grau de programação e processamento do lado do cliente.

        A expressão cliente, ou "User Agent" se refere, usualmente, ao parceiro de uma sessão HTTP que inicia o pedido ("request") a ser atendido ("response") pelo servidor Web.

        Na medida que a grande rede mundial (World Wide Web) cresce, em recursos e complexidade, novos tipos de "User Agents" são inventados para prover novas funcionalidades junto aos usuários.

      3. O servidor ("Web Server")
      4. Servidores Web são processos que aceitam conexões (ou seja, sessões HTTP) solicitadas por clientes Web (Browsers) e, em resposta, fornecem informações na forma de mensagens e documentos de variados tipos, por exemplo, textos, imagens, som, vídeo ... etc ...

        O desenvolvimento de servidores Web começou em 1990 e, atualmente, existem centenas de milhares de servidores Web na Internet, além de um número desconhecido de servidores utilizados nas Intranets corporativas.

        Inicialmente, e durante algum tempo, apenas havia opções de servidores Web para plataformas UNIX. Atualmente, existem bons Servidores Web para plataformas Win32 e Mac.

      5. O protocolo HTTP
      6. Os servidores Web utilizam o protocolo HTTP (Hypertext Transfer Protocol) que foi implementado para permitir uma transferência rápida e eficiente de documentos na Internet".

      7. Estrutura das transações HTTP

      HTTP é um protocolo fácil de entender, pois é baseado no paradigma pedido e resposta (request e response). Uma transação HTTP, independente da sua complexidade, possui a seguinte estrutura elementar:

      O protocolo HTTP é "stateless" por natureza. Isto quer dizer que cada transação (pedido e resposta) é completada de forma independente, não sendo preservadas as informações de status referentes às transações anteriormente completadas. Isto exige um nível maior de controle e complexidade na programação de aplicativos Web.

      Existem vários métodos e recursos que permitem administrar essa complexidade das transações HTTP.

      1. O pedido do cliente ("request")

      Como já dissemos, o protocolo HTTP é constituído de pedidos ("requests") e respostas ("responses"). Os "requests" são, usualmente, gerados, num formato padrão, pelo cliente Browser, atendendo a eventos como, por exemplo, o "click" do usuário sobre um hyperlink.

      Existem vários métodos para o cliente encaminhar um pedido ao servidor Web. O método GET é adequado para obter informações do servidor. Porém, quando for necessário enviar dados para o servidor, geralmente é utilizado o método POST, que permite utilizar FORMs como entrada de dados.

      O tipo de ação a ser executada pelo servidor Web é determinado pelo método adotado em relação ao pedido do cliente A codificação completa dos comandos e a sintaxe correta do pedido, em conformidade com o método adotado e as normas do protocolo HTTP, são fornecidas pelo Browser, de maneira automática. Não é necessário que o programa CGI ou ISAPI especifiquem os cabeçalhos do pedido HTTP, ou seja, os comandos que precedem o corpo do documento transferido.

      Os pedidos do cliente são formulados em conformidade com as normas do protocolo HTTP. Cada pedido é acompanhado de um cabeçalho ("request header") , que proporciona informações adicionais a respeito da transação HTTP. Esses cabeçalhos constituem, de fato, um protocolo de entendimento entre o cliente Browser e o servidor Web. Veja, a seguir, um exemplo de cabeçalho de pedido tal como seria enviado pelo Browser Internet Explorer 3.0:

      GET /default.htm HTTP/1.0

      Accept: */*

      Accept-Language: en

      UA-pixels: 1024x768

      UA-color: color16

      UA-OS: Windows NT

      UA-CPU: x86

      User-Agent: Mozilla/2.0 (compatible; MSIE 3.0B; Windows NT)

      Host: 199.1.154.46

      Analisando o cabeçalho acima, vemos que:

      Os aplicativos CGI ou ISAPI utilizam as informações dos cabeçalhos para montar o corpo da resposta. Desta forma, o cliente (Browser) pode receber o documento solicitado, sendo este apresentado da maneira mais correta e adequada possível.

      1. Resposta do servidor ("response")
      2. A resposta do servidor a um pedido do cliente (caso a transação seja completada com sucesso), é precedida de códigos de status e cabeçalhos que definem as características das informações contidas nessa resposta.

        Veja, a seguir, um exemplo de uma resposta do servidor Web:

        HTTP/1.0 200 OK

        Server: Microsoft-IIS/2.0

        Date: Fri, 31 Dez 1996 16:53:58 GMT

        Content-Type: text/html

        Accept-Ranges: bytes

        Last-Modified: Fri, 12 Jul 1996 01:30:00 GMT

        Content-Length: 4051

        [linha em branco terminada com CRLF]

        <!doctype html public "-//IETF//DTD HTML//EN">

        <html>

        <head>

        </head>

        <body background="/images/backgrnd.gif">

        [      corpo da entidade documento      ]

      3. "Request / Response Headers"
      4. Os principais cabeçalhos de pedido e resposta, especificados pelo protocolo HTTP, reconhecidos e utilizados pela maioria dos servidores Web e clientes Browser, são os seguintes:

        Request Header

        Descrição

        Accept

        Especifica os tipos de mídia que serão aceitáveis na resposta do servidor. Pode ser utilizado para mostrar que o pedido é limitado a um conjunto de tipos de dado, por exemplo, um pedido solicitando uma imagem.

        Accept-Language

        Similar ao Accept. Indica um conjunto dos idiomas preferidos na resposta ao pedido.

        Authorization

        Serve para que o cliente se autentique a si mesmo

        Cache-Control

        Estabelece diretivas a serem observadas pelos mecanismos de caching, ao longo da cadeia de pedido/resposta. Estas diretivas se sobrepõem ao algoritmo padrão de caching.

        Content-Base

        Especifica a URI básica, a ser utilizada para resolver as referências relativas a URLs.

        Content-Length

        Informa o tamanho do corpo do documento sendo transmitido.

        Content-Type

        Especifica o tipo de mídia do documento enviado.

        Date

        Representa a data e hora em que a mensagem foi originada.

        Expires

        Representa a data/hora após a qual a entidade (documento) perde a validade. Esta informação é importante em relação ao controle de "caching" efetuado pelo Browser e ao "refresh" obrigatório quando as informações não são mais válidas.

        Host

        Especifica o Host Internet e o número da porta HTTP.

        Server

        Informa sobre o software utilizado pelo servidor que originou a resposta.

        User-Agent

        Guarda informações sobre o cliente (user agent) que originou o pedido. Esta informação pode ser utilizada com objetivos estatísticos, trace, log... etc ...

        Location

        Especifica a exata localização de um recurso, para ser usada, por exemplo em caso de redirecionamento de URLs

      5. Status codes do HTTP
      6. A primeira linha, no cabeçalho de resposta, é a "linha de status", que informa a versão HTTP em uso e o código de status da transação, conforme a seguinte tabela:

        Código

        Texto da resposta

        Descrição

        200

        OK

        O pedido foi processado com sucesso

        201

        Created

        O pedido foi processado com sucesso e um novo recurso foi criado. Este novo recurso pode ser referenciado pela URI(s) retornadas na resposta.

        202

        Accepted

        O pedido foi aceito mas o processamento do mesmo ainda não foi completado.

        204

        No Content

        O servidor processou o pedido mas não foram geradas informações para enviar de volta.

        300

        Multiple Choices

        Este código de resposta não é diretamente usado pelo protocolo HTTP, mas serve para interpretar a classe 3XX de respostas.

        301

        Moved Permanently

        O recurso requisitado foi associado de forma definitiva com uma outra nova URL. Quaisquer referências no futuro usarão esta URL.

        302

        Moved Temporarily

        O recurso solicitado reside temporariamente numa outra URL

        304

        Not Modified

        O cliente fez um GET condicional e o acesso foi permitido, mas o documento não foi modificado após a data especificada no campo "If-Modified-Since". O servidor responde com um status code sem enviar ao cliente o corpo da entidade documento.

        400

        Bad Request

        O pedido do cliente não foi reconhecido pelo servidor, devido a uma sintaxe incorreta.

        401

        Unauthorized

        O pedido precisa de autenticação do usuário.

        403

        Forbidden

        O servidor entendeu o pedido mas não vai atendé-lo porque o usuário está proibido de executar o serviço solicitado.

        404

        Not Found

        O servidor não achou a URI solicitada.

        500

        Internal Server Error

        O servidor encontrou uma condição inesperada que impede atender o pedido do cliente.

        501

        Not Implemented

        O servidor não consegue executar o pedido, por exemplo quando ele não reconhece o "request method" e, por tanto, não pode aplicá-lo a nenhum recurso.

        502

        Bad Gateway

        O servidor, quando está atuando como Gateway ou proxy recebe uma resposta inválida de outro servidor.

        503

        Service Unavailable

        O servidor não pode atender o pedido por estar temporariamente sobrecarregado ou em manutenção.

      7. Variáveis de ambiente
      8. As variáveis de ambiente (como são chamadas no CGI), ou variáveis do servidor (como são conhecidas na ISAPI), são usadas, geralmente, para passar informações entre o servidor WEB e o programa. A tabela que segue apresenta algumas das variáveis de ambiente mais utilizadas.

        Nome da variável

        Descrição da variável

        CONTENT_LENGTH

        Especifica o tamanho dos dados sendo transferidos, conforme informado pelo cliente.

        CONTENT_TYPE

        Especifica o tipo da informação quando esta vai anexada (attached) ao pedido, como é o caso dos métodos POST e PUT.

        HTTP_USER_AGENT

        Informa o software cliente (Browser) utilizado.

        PATH_INFO

        Especifica uma informação adicional de percurso ("path"). Esta informação pode ser decodificada pelo servidor antes de ser passada para o script CGI ou ISAPI.

        QUERY_STRING

        Especifica a informação que acompanha o nome da URL, após o sinal de interrogação ("?").

        REMOTE_HOST

        Especifica o nome do host que fez o pedido. Se o servidor não possuir esta informação, será fornecido o conteúdo da variável "REMOTE_ADDR".

        REMOTE_ADDR

        Especifica o endereço IP do host que fez o pedido..

        REQUEST_METHOD

        Especifica o método com o qual está sendo feito o pedido. Pode ser: GET, HEAD, POST.

        SERVER_NAME

        Especifica o nome ou endereço IP do servidor.

        SERVER_PORT

        Número da porta HTTP pela qual o pedido foi atendido no servidor.

        HTTP_COOKIE

        Conteúdo de Cookies previamente definidas através do comando HTTP "Set Cookie: …", a ser especificado, dentro de programa OpusWEB, antes do comando OPUSWEB "Html_head()".

        SCRIPT_NAME

        Nome do script (programa, DLL ...) sendo executado no servidor.

        Anterior Home Page Sumário E-Mail Próximo