sexta-feira, 19 de junho de 2009

Testando HTTP sem usar um navegador



Um servidor WEB funciona utilizando o protocolo HTTP [1], e responde a requisições tais como "HTTP GET" vindas de um cliente (o browser).

Geralmente não vemos o que está sendo transmitido entre as duas partes: cliente (navegador) e servidor WEB. Entretanto, podemos facilmente inspecionar esse tráfego de dados através da ferramenta telnet [2], disponível em praticamente qualquer plataforma.

Para fazer o teste, primeiro abra um terminal no Linux ou um prompt de comando no Windows. Você vai precisar então digitar o comando com a seguinte sintaxe:

telnet [servidor] [porta]

Por exemplo, para acessar a página do Grupo de Usuários PostgreSQL do Brasil [3], execute o seguinte:

telnet postgresql.org.br 80

Com isso você estará conectado ao servidor WEB especificado e poderá desta forma executar qualquer comando do protocolo HTTP [4] desejado, tal como GET, HEAD ou POST.

Em seguida, para efetuar uma requisição HTTP do tipo GET ao servidor, você precisará executar um comando no seguinte formato:

GET [página] HTTP/1.0

Para exemplificar, faça uma simulação à esta página, digitando o texto a seguir no telnet:

GET /node/61 HTTP/1.0

Atenção: pressione ENTER duas vezes. Se a página existir no servidor, você terá como resultado algo como ilustrado na figura abaixo.




Preste atenção no cabeçalho (header) HTTP enviado pelo servidor após a execução. São justamente estes dados que o browser interpreta automaticamente e o usuário não vê.


HTTP/1.1 200 OK
Date: Sun, 21 Jun 2009 02:08:33 GMT
Server: Apache/2.2.9 (Debian) PHP/5.2.0-8+etch15 mod_ssl/2.2.9 OpenSSL/0.9.8g
X-Powered-By: PHP/5.2.0-8+etch15
Set-Cookie: SESSd41d8cd98f00b204e9800998ecf8427e=baefb8cb6bc0a5ed29340ec05aa6ff38; expires=Tue, 14 Jul 2009 05:41:54 GMT; path=/
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Last-Modified: Sun, 21 Jun 2009 02:08:34 GMT
Cache-Control: store, no-cache, must-revalidate
Cache-Control: post-check=0, pre-check=0
Connection: close
Content-Type: text/html; charset=utf-8


A primeira linha é uma das mais importantes do cabeçalho, pois ela indica se houve sucesso ou erro durante o atendimento da requisição HTTP. O código 200 no exemplo significa que a página HTML foi recuperada com sucesso.

Você pode ainda receber um código de status 404 caso a página não seja encontrada (ou seja, o famoso "Erro 404"), o código 301 se a página tiver sido movida permanentemente ou 401 caso você não tenha autorização para acessá-la.

A lista completa dos códigos de status do protocolo HTTP pode ser consultada aqui [5]. Se você é um administrador de sistemas ou desenvolvedor de aplicações WEB possivelmente esta abordagem lhe será útil. :D

O conteúdo HTML que será renderizado pelo browser vem logo após o cabeçalho.

Referências:
[1] http://pt.wikipedia.org/wiki/Http
[2] http://pt.wikipedia.org/wiki/Telnet
[3] http://postgresql.org.br
[4] Hypertext Transfer Protocol -- HTTP/1.0
[5] RFC 2616 - Status Code Definitions