Curso de Aplicaçoes WEB em PHP: 02. Enviando Dados para o Servidor HTTP

Author: Ricardo Soares - Postado em: 07/09/2009
Relacionado as categorias: Diversos, Guias e Tutoriais, Planeta PHP, Tecnologia | Leave a Comment 





Programar para a web pode ser considerado como um jogo que consiste em receber os dados do usuário, processá-los e enviar a resposta dinâmica. Uma vez enviada a resposta, é encerrado o contato entre o servidor e o cliente. Portanto a primeira coisa a aprender é como fazer para receber os dados enviados pelo browser para o servidor.

O protocolo HTTP provê dois principais métodos para enviar informações para o servidor web, além da URL referente ao arquivo solicitado. Esses métodos são o POST e o GET.

O protocolo HTTP/1.0 também especifica o método HEAD, utilizado apenas para transmitir informações do header, além dos métodos PUT e DELETE, que não serão abordados neste curso.

O método GET

A especificação do protocolo HTTP/0.9 (a primeira implementação do HTTP) possuía a definição do método GET, utilizado pelo browser para solicitar um documento específico.

Por exemplo: a seguinte requisição HTTP retornaria o documento “index.html”, localizado no diretório do servidro chamado “teste”:

GET /teste/index.html CRLF

Devemos notar que a requisição GET inicia com a palavra GET, inclui o documento solicitado e encerra com a combinação dos caracteres carriage return e line feed.

Para um melhor entendimento, você pode fazer uma requisição GET conectando diretamente em algum servidor WEB, conectando através de um programa de telnet (geralmente o servidor http utiliza a porta 80). A resposta será o código da página solicitada.

telnet www.guia-aju.com.br 80
Trying 200.241.59.16…
Connected to www.guia-aju.com.br.
Escape character is ‘^]’.

GET /index.php3

(… página solicitada …)

Connection closed by foreign host.

Obviamente a diferença do browser é que ele trata as informações recebidas e exibe a página já formatada.

Através do método GET também é possível passar parâmetros da requisição ao servidor, que pode tratar esses valores e até alterar a resposta a depender deles, como no exemplo abaixo:

telnet www.guia-aju.com.br 80
Trying 200.241.59.16…
Connected to www.guia-aju.com.br.
Escape character is ‘^]’.
GET /index.php3?id=0024horas&tipo=Taxi

(… página solicitada …)

Connection closed by foreign host.

No exemplo são passados dois parâmetros: id e tipo. Esses parâmetros estão no formato conhecido por URLencode, que é detalhado no capítulo 09.

Apesar de ser possível passar parâmetros utilizando o método GET, e com isso gerar páginas dinamicamente, este método tem pelo menos dois problemas que em determinadas circunstâncias podem ser considerados sérios:

O primeiro é que o GET permite uma quantidade de dados passados limitada a 1024 caracteres, o que pode gerar perda de informações em certos casos.

O segundo é que pelo fato de que as informações fazem parte da URL, todos os dados podem ser vistos pelo usuário. Isso pode ser extremamente perigoso quando informações sigilosas estão envolvidas (senha, por exemplo).

Headers

A versão 1.0 do protocolo HTTP trouxe boas inovações ao mesmo. Uma delas foi a criação de headers nas mensagens de requisição e de resposta. Os headers são informações trocadas entre o navegador e o servidor de maneira transparente ao usuário, e podem conter dados sobre o tipo e a versão do navegador, a página de onde partiu a requisição (link), os tipos de arquivos aceitos como resposta, e uma série de outras informações.

Assim foi possível definir um outro método de requisição de arquivos, que resolveu os principais problemas do método GET.

O método POST

Através da utilização de headers é possível enviar os parâmetros da URL solicitada sem expor esses dados ao usuário, e também sem haver um limite de tamanho.

Uma conexão ao servidor HTTP utilizando o método POST seria algo semelhante ao que segue:

telnet www.guia-aju.com.br 80
Trying 200.241.59.16…
Connected to www.guia-aju.com.br.
Escape character is ‘^]’.

POST /index.php3
Accept */*
Content-type: application/x-www-form-urlencoded
Content-length:22
id=0024horas&tipo=Taxi

(… página solicitada …)

Connection closed by foreign host.

Devemos observar os headers enviados ao servidor: a linha “Accept”  informa os tipos de dados que podem ser enviados como resposta (no caso, todos). A linha “Content-type” informa o tipo de dado que está sendo enviado (urlencoded). O terceiro header é o mais importante pois informa o tamanho do corpo da mensagem, que contém os parâmetros. Após todos os headers há um salto de linha e então é iniciado o corpo da mensagem, no formato urlencoded.

Obviamente o usuário não deve se preocupar com os headers, em codificar os dados ou em calcular o tamanho do corpo da mensagem. O browser faz isso de maneira transparente.

Utilizando GET e POST

O método GET pode ser utilizado através da digitação de um endereço no local apropriado do navegador ou através de um hiperlink, ou seja, uma referência de uma página a outra. Nesses casos é preciso converter os dados para o formato urlencode. A terceira maneira de utilizar o GET é através de formulários HTML, e neste caso o usuário não precisa se preocupar com a codificação dos dados. A utilização de formulários HTML é a única maneira possível de submeter dados
pelo método POST.













Comments

Leave a Reply






Últimos posts