Dúvido que exista nos dias de hoje um desenvolvedor que nunca ouviu uma das seguintes frases:
· “Desenvolver ficou fácil”;
· “Queria ver se você tivesse que escrever este mesmo código com Cobol”;
· “Ah se precisássemos desenvolver isto em VB4”;
· “Hoje está tudo pronto, é só chamar os métodos que o .NET cuida de tudo”;
Realmente todas as afirmativas acima são verdadeiras. Vários métodos que hoje são “nativos”, antigamente precisavam ser codificados. Por um lado, isto é muito bom, pois reduz o tempo gasto pelos programadores na escrita de códigos complexos que realizam tarefas cotidianas (como envio de e-mails, por exemplo). Por outro lado, porém, faz com que os novos programadores consigam iniciar suas carreiras e construir grandes aplicações mesmo sem entender alguns conceitos básicos.
A idéia deste artigo é explicar o que ocorre em uma comunicação WEB. Para isto, vamos propor o seguinte cenário:
O usuário abre um browser (Internet Explorer, Chrome, Firefox) e digita um endereço qualquer (www.google.com.br). Uma página então é exibida ao usuário. Esta página pode ser a ferramenta de busca mundialmente conhecida, uma página de erro, uma página de indisponibilidade momentânea. Ora, como que este processo ocorre?
Devemos ter em mente que uma aplicação WEB é uma aplicação Cliente – Servidor e, consequentemente, possui dois componentes:
1. Cliente: Responsável por apresentar a interface ao usuário, permitir que o usuário digite informações e enviar estas informações para processamento no servidor;
2. Servidor: Recebe e responde a requisições feitas pelos cliente. Geralmente, esta resposta é feita com uma página HTML, responsável pela geração da interface solicitada;
Mas afinal, como que o nosso cliente conversa com os servidores?
Através de um protocólo denominado HTTP (Hypertext Transfer Protocol), assinalado a porta TCP 80. Caso o servidor possua uma certificado de segurança (caso do acesso externo da Iteris), pode-se utilizar o protocolo HTTPS (HTTP Secure) para autenticar o servidor e encriptar a comunicação. O HTTPS é assinalado na porta 443.
Vamos então estudar separadamente cada um dos termos definidos acima (Cliente, Servidor e o protocolo HTTP).
Servidor
Quando recebe uma requisição de um cliente, o servidor toma determinada ação. Dentre estas, destacamos as seguintes:
· Verificar se a requisição esta corretamente estruturada: Ignorar requisições maliciosas que visem prejudicar o servidor;
· Autenticar o usuário: caso a autenticação seja necessária. Verifica se as credenciais do usuário foram enviadas corretamente na requisição;
· Autorizar o usuário: verifica se o usuário previamente autenticado possui acesso na funcionalidade desejada pela requisição;
· Tratar a requisição;
· Tratar eventuais erros;
· Autenticar-se: caso a requisição seja feita via HTTPS;
Cliente (Browser)
No caso dos clientes, destacamos as seguintes ações:
· Enviar requisições ao servidor;
· Autenticar o servidor (caso a requisição seja feita via HTTPS);
· Processar a resposta;
· Exibir o conteúdo HTML;
· Executar Scripts: Scripts escritos em JavaScript, jQuery que permitem respostas sem a necessidade de recarregar a página;
HTTP
Conforme vimos acima, representa o protocolo responsável por requisitar as páginas no servidor e enviar a resposta obtida para o cliente reponsável pela requisição. Um exemplo de requisição é o seguinte:
GET /default.aspx HTTP/1.1
Host: http://www.bing.com
A palavra GET representa o método. A seguir, temos a URI (Uniform Resource Identifier) do recurso que será solicitado. No nosso exemplo, “/default.aspx”. Por fim, temos a versão do protocolo HTTP que será utilizado (neste caso, HTTP/1.1). Na segunda linha encontra-se o HOST que determina o nome do website que será buscado no servidor.
Abaixo, uma lista com os métodos mais utilizados do HTTP/1.1.
Método |
Descrição |
GET |
Obtém um objeto (como uma webpage) do servidor. |
POST |
Envia data ao servidor para processamento. É o comando utilizado quando um usuário preenche dados em um formulário e envia para processamento. |
PUT |
Permite que a aplicação crie um recurso em uma determinada URL. |
DELETE |
Exclui um recurso no servidor. |
TRACE |
Utilizado para testes e identificação de problemas. |
DEBUG |
Inicia o debbug do ASP.NET. Informa ao VS o processo ao qual o debbuger será atachado. |
Segue abaixo um exemplo de resposta do servidor:
HTTP/1.1 200 OK
Server: Microsoft-IIS/6.0
Content-Type: text/html
Content-Length: 44
<html><body> Entendendo o HTTP </body><html>
Na primeira linha, encontra-se a versão do protocolo e a resposta enviada pelo servidor (neste caso, 200). Abaixo, um breve descritivo das possíveis respostas:
Status |
Descrição |
1xx |
Informação: A requisição foi recebida e o servidor continua o processamento. |
2xx |
Sucesso: A requisição foi recebida, entendida e aceita. |
3xx |
Redirecionar: O cliente deve acessar um recurso diferente. |
4xx |
Erro no Cliente: A requisição possui algum problema de sintaxe. |
5xx |
Erro no Servidor: O servidor falhou ao receber a requisição. |
A segunda linha indica o tipo do servidor (neste caso, Microsft IIS/6.0).
A terceira linha (Content-Type) representa o tipo do recurso que será enviado ao cliente.O indicador está no formato MIME (Multipurpose Internet Mail Extensions). O MIME é um designador que possui duas partes (tipo/subtipo). No nosso caso é text/html, ou seja, enviará um comando html no formato de texto.
Por fim, temos o tamanho do conteúdo e a mensagem de resposta. O cliente processará a resposta com base no tipo de seu MIME.
GET X POST
Estes dois comandos podem ser utizados para enviar dados de um formulário para o servidor.
Quando utilizamos o comando GET, devemos adicionar os dados que serão enviados na URL como parte de uma Query String.
Ex: http://www.bing.com/search?q=HTTP
Pontos negativos na utilização do método GET:
· Usuários podem mudar facilmente os parâmetros na querystring exibida;
· Em alguns casos é necessário enviar uma grande quantidade de dados ao servidor;
Quando utilizamos o comando POST, por sua vez, os dados são enviados dentro do corpo da mensagem, o que torna este comando a melhor opção para submissão de grande quantidade de dados. Quando os dados são enviados ao servidor como parte da requisição, temos o famoso PostBack, que estudaremos bastante nos próximos artigos.
Para finalizar, vamos citar dois objetos bem bacanas do nosso ASP.NET.
O ASP.NET prove os seguintes objetos para representar a comunicação entre o cliente e o servidor:
· Request: Representa a comunicação entre o cliente e o servidor. Utilizamos este objeto para verificar os cookies existentes, acessar parâmetros da Query String, entre outros.
· Response: Representa a comunicação entre o servidor e o cliente, isto é, a resposta. Utilizamos este objeto para setar cookies, definir cache, determinar o tempo de expiração de uma página, entre outros.
Bom, por hoje é só.
Espero que ajude!
Abraços,
Felipe Furlan da Silva