sábado, 10 de novembro de 2012

HTTP: Requisição e Resposta

O Hypertext Transfer Protocol (HTTP)
HTTP é o protocolo que permite web servers e browsers enviarem e receberem dados através da internet. É um protocolo de requisição e resposta -- o cliente faz a requisição e o servidor dá a resposta ao cliente. HTTP usa confiáveis conexões TCP, por default na porta 80. A primeira versão do HTTP foi HTTP/0.9, e depois atualizada para a versão HTTP/1.0. A versão atual está em HTTP/1.1.





Em HTTP o cliente sempre inicializa uma transação ao estabelecer a conexão e enviar uma requisição HTTP. O servidor não tem o controle para fazer uma conexão de retorno para o cliente. O cliente ou o servidor pode encerrar prematuramente uma conexão, como por exemplo, ao usar o browser, você pode clicar no botão parar e consequentemente parar o processo de atualização de uma pagina, assim finalizando a conexão HTTP com o web server.

Requisições HTTP
Uma requisição HTTP consiste em três componentes:

  • Cabeçalho da mensagem
  • Corpo da mensagem
  • Requisição
Um exemplo de uma requisição HTTP:

POST /servlet/default.jsp HTTP/1.1
Accept: text/plain; text/html 
Accept-Language: en-gb 
Connection: Keep-Alive 
Host: localhost 
Referer: http://localhost/ch8/SendDetails.htm 
User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98) 
Content-Length: 33 
Content-Type: application/x-www-form-urlencoded 
Accept-Encoding: gzip, deflate 

LastName=Magalhaes&FirstName=Guilherme

A requisição aparece na primeira linha:

POST /servlet/default.jsp HTTP/1.1

Onde o POST é o método da requisição , /servlet/default.jsp representa a URI e HTTP/1.1 representa a versão do protocolo.
Cada requisição HTTP pode usar um dos muitos métodos de requisição existente, a versão HTTP/1.1 suporta sete tipos de requisição: GET, POST, HEAD, OPTIONS, PUT, DELETE e TRACE. GET e POST são os mais usados em aplicações na internet.
A URI é geralmente interpretado como sendo o diretório relativo de raiz do servidor. Assim, ele deve sempre começar com uma barra (/). Uma URL é um tipo de URI.
O cabeçalho da mensagem contem informações importantes sobre o ambiente de trabalho do cliente e sobre o corpo da mensagem. Por exemplo, pode conter a língua para qual o browser está definido, o comprimento do corpo da mensagem, e assim por diante.

No exemplo de requisição que vimos, foi apresentado o valor dentro do corpo da requisição HTTP:

LastName=Magalhaes&FirstName=Guilherme

O valor normalmente é maior em uma requisição normal.

Respostas HTTP
Similar as requisições, uma resposta HTTP consiste em três componentes:

  • Status-protocolo Descrição-código
  • Cabeçalhos de resposta
  • Corpo da entidade
Um exemplo de uma resposta HTTP:

HTTP/1.1 200 OK
Server: Microsoft-IIS/4.0
Date: Mon, 3 Jan 1998 13:13:33 GMT
Content-Type: text/html
Last-Modified: Mon, 11 Jan 1998 13:23:42 GMT
Content-Length: 112

<html>
<head>
<title>HTTP Response Example</title></head><body>
Welcome to Brainy Software
</body>
</html>

A primeira linha do cabeçalho é similar a primeira linha do cabeçalho da requisição. A primeira linha fala sobre a versão do protocolo que é HTTP/1.1, a requisição sucedida (200 = sucesso), e que tudo foi OK.
O cabeçalho de resposta contêm informações úteis semelhante aos cabeçalhos na requisição. O corpo da entidade da resposta é o conteúdo HTML da própria resposta. O cabeçalho e o corpo entidade são separadas por uma sequência de CRLFs.