You are on page 1of 27

O protocolo HTTP

O protocolo HTTP
HTTP (acrônimo para Hypertext Transfer Protocol,
que significa Protocolo de Transferência de
Hipertexto) é um protocolo de comunicação (na
camada de aplicação segundo o Modelo OSI)
utilizado para transferir dados por intranets e
pela World Wide Web.
Normalmente, este protocolo utiliza o porta 80 e é
usado para a comunicação de sítios web,
comunicando na linguagem HTML. Contudo,
para haver comunicação com o servidor do sítio
é necessário utilizar comandos adequados, que
não estão em linguagem HTML.
O protocolo HTTP
Este protocolo tem sido usado pela WWW desde 1990. A
primeira versão de HTTP, chamada HTTP/0.9, era um
protocolo simples para a transferência de dados no
formato de texto ASCII pela Internet, através de um
único método de requisição, chamado GET. A versão
HTTP/1.0 foi desenvolvida entre 1992 e 1996 para suprir
a necessidade de transferir não apenas texto. Com essa
versão, o protocolo passou a transferir mensagens do
tipo MIME44 (Multipurpose Internet Mail Extension) e
foram implementados novos métodos de requisição,
chamados POST e HEAD.
O protocolo HTTP
Um sistema de comunicação em rede
possui diversos protocolos que trabalham
em conjunto para o fornecimento de
serviços. Para que o protocolo HTTP
consiga transferir seus dados pela Web, é
necessário que os protocolos TCP e IP
(Internet Protocol, Protocolo de Internet)
tornem possível a conexão entre clientes
e servidores através de sockets TCP/IP.
O protocolo HTTP
Em documentos de RFC (Request for
Comments) relacionado a TCP ou UDP,
um soquete em um computador é definido
como a combinação de um endereço IP,
um protocolo, e o número da porta do
protocolo.
O protocolo HTTP
O HTTP utiliza o modelo cliente-servidor, como a maioria
dos protocolos de rede, baseando-se no paradigma de
requisição e resposta. Um programa requisitante
(cliente) estabelece uma conexão com um outro
programa receptor (servidor) e envia-lhe uma requisição,
contendo a URI, a versão do protocolo, uma mensagem
MIME (padrão utilizado para codificar dados em formato
de textos ASCII para serem transmitidos pela Internet)
contendo os modificadores da requisição, informações
sobre o cliente e, possivelmente, o conteúdo no corpo
da mensagem.
O protocolo HTTP
O servidor responde com uma linha de
status (status line) incluindo sua versão de
protocolo e um código de operação bem
sucedida ou um código de erro, seguido
pelas informações do servidor,
metainformações da entidade e possível
conteúdo no corpo da mensagem. Após o
envio da resposta pelo servidor, encerra-
se a conexão estabelecida.
O protocolo HTTP
O protocolo HTTP faz a comunicação entre o
cliente e o servidor através de mensagens. O
cliente envia uma mensagem de requisição de
um recurso e o servidor envia uma mensagem
de resposta ao cliente com a solicitação. Uma
mensagem, tanto de requisição quanto de
resposta, é composta, conforme definido na
RFC 2616, por uma linha inicial, nenhuma ou
mais linhas de cabeçalhos, uma linha em branco
obrigatória finalizando o cabeçalho e por fim o
corpo da mensagem, opcional em determinados
casos.
O protocolo HTTP
O cabeçalho da mensagem (header) é utilizado
para transmitir informações adicionais entre o
cliente e o servidor. O cabeçalho é especificado
imediatamente após a linha inicial da transação
(método), tanto para a requisição do cliente
quanto para a resposta do servidor, seguido de
dois pontos (:) e um valor. Existem quatro tipos
de cabeçalhos que poderão ser incluídos na
mensagem os quais são: general-header,
requestheader, response-header e entity-
header.
O protocolo HTTP
Uma mensagem HTTP pode conter um corpo de
dados que são enviados abaixo das linhas de
cabeçalho. Em uma mensagem de resposta, o
corpo da mensagem é o recurso que foi
requisitado pelo cliente, ou ainda uma
mensagem de erro, caso este recurso não seja
possível. Já em uma mensagem de requisição,
o corpo pode conter dados que serão enviados
diretamente pelo usuário ou um arquivo que
será enviado para o servidor.
O protocolo HTTP
Quando uma mensagem HTTP tiver um
corpo, poderão ser incluídos cabeçalhos
de entidades que descrevem suas
características, como por exemplo, o
Content-Type que informa o tipo MIME
dos dados no corpo da mensagem e o
Content-Length que informa a quantidade
de bytes que o corpo da mensagem
contém.
O protocolo HTTP
Alguns tipos MIME:
Exemplo Descrição

text/plain Arquivo no formato texto (ASCII)


text/html Arquivo no formato HTML,
utilizado como padrão para documentos Web
Image/gif Imagem com o formato GIF
Image/jpeg Imagem com o formato JPEG
application/zip Arquivo compactado
O protocolo HTTP
Uma mensagem de requisição do cliente é
composta pelos seguintes campos: uma linha
inicial (Request-Line); linhas de cabeçalhos
(Request-header); uma linha em branco
obrigatória e um corpo de mensagem opcional.
A linha inicial de uma requisição é composta por
três partes separadas por espaços: o método
(Method), a identificação do URI (Request-URI)
e a versão do HTTP (HTTP-Version) utilizado.
O protocolo HTTP
Request-URI é um identificador uniforme de
recurso (Uniform Resource Identifier) que
identifica sobre qual recurso será aplicada
a requisição. No protocolo HTTP, o tipo de
URI utilizado é chamado de URL (Uniform
Resource Locater), o qual é composto
pela identificação do protocolo, pelo
endereço do computador servidor e pelo
documento requisitado.
O protocolo HTTP
O protocolo HTTP define oito métodos que
indicam a ação a ser realizada no recurso
especificado. Conforme Bastos & Ladeiras
(2001), o método determina o que o
servidor deve fazer com o URL fornecido
no momento da requisição de um recurso.
O protocolo HTTP
GET: É o método mais comum: solicita algum recurso
como um arquivo ou um script CGI (qualquer dado que
estiver identificado pelo URI) por meio do protocolo
HTTP. O método GET é reconhecido por todos os
servidores.
Pedido do cliente (seguido por uma linha em branco, de
maneira que o pedido termina com um newline duplo,
cada um composto por um carriage return seguido de
um Line Feed):

GET /index.html HTTP/1.1


Host: www.exemplo.com
O protocolo HTTP
A utilização do método POST em uma requisição ocorre
quando é necessário enviar dados ao servidor para
serem processados geralmente por um programa script
identificado no Request-URI. Uma requisição por meio
desse método sempre requer que as informações
submetidas sejam incluídas no corpo da mensagem e
formatadas como uma query string, além de conter
cabeçalhos adicionais especificando seu tamanho
(Content-Lenght) e seu formato (Content-Type). Por
isso, esse método oferece uma maior segurança em
relação aos dados transferidos, ao contrário do método
GET que os dados são anexados a URL, ficando visíveis
ao usuário.
O protocolo HTTP
Exemplo de utilização do método POST:

POST /index.html HTTP/1.0


Accept: text/html
If-modified-since: Sat, 29 Oct 1999 19:43:31 GMT
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
Nome=NamePessoa&Idade=99&Curso=Computacao
O protocolo HTTP
Outros métodos:
• HEAD: É o mesmo que GET, mas sem que o recurso seja
retornado. É usado para obter meta-informações por meio do
cabeçalho da resposta, sem ter que recuperar todo o
conteúdo.
• PUT: Envia certo recurso.
• DELETE: Exclui o recurso.
• TRACE: Ecoa o pedido, de maneira que o cliente possa saber
o que os servidores intermediários estão mudando em seu
pedido.
• OPTIONS: Recupera os métodos HTTP que o servidor aceita.
• CONNECT: Serve para uso com um proxy que possa se
tornar um túnel SSL (um túnel pode ser usado, por exemplo,
para criar uma conexão segura).
O protocolo HTTP
Uma mensagem de resposta do servidor é composta
pelos seguintes campos: uma linha inicial (Status-
Line); linhas de cabeçalhos (Responseheader); uma
linha em branco obrigatória e um corpo de
mensagem opcional. A linha inicial de uma
resposta, chamada de linha de status, possui por
sua vez três partes separadas por espaços: a
versão do protocolo HTTP (HTTP-Version), um
código de status (Status-Code) da resposta, que
fornece o resultado da requisição, e uma frase de
justificativa (Reason-Phrase) que descreve o código
do status.
O protocolo HTTP
O Status-Line de uma resposta HTTP indica
ao cliente se sua requisição foi bem
sucedida ou não. Esta situação é
fornecida através de um código de retorno
(Status-Code) e uma frase explicativa
(Reason-Phrase). O código de status é
formado por três dígitos e o primeiro dígito
representa a classe que pertence
classificada em cinco tipos.
O protocolo HTTP
Tipos de respostas:
• 1xx: Informational (Informação) – utilizada para enviar
informações para o cliente de que sua requisição foi
recebida e está sendo processada;
• 2xx: Success (Sucesso) – indica que a requisição do
cliente foi bem sucedida;
• 3xx: Redirection (Redirecionamento) – informa a ação
adicional que deve ser tomada para completar a
requisição;
• 4xx: Client Error (Erro no cliente) – avisa que o cliente
fez uma requisição que não pode ser atendida;
• 5xx: Server Error (Erro no servidor) – ocorreu um erro no
servidor ao cumprir uma requisição válida.
O protocolo HTTP
O HTTP/1.0 é um protocolo stateless. Isto significa
que as conexões entre um cliente e um servidor
são encerradas após o envio de cada requisição
ou resposta. Cada vez que uma conexão é
estabelecida ou encerrada, é consumida uma
grande quantidade de tempo da CPU, de largura
de banda e de memória. Na maioria das vezes,
para se obter o resultado esperado, é
necessário realizar mais de uma solicitação de
recursos através de várias conexões.
O protocolo HTTP
A conexão persistente, implementada como conexão
padrão no protocolo HTTP/1.1, possibilita que uma
conexão seja estabelecida para enviar várias
requisições em seqüência sem a necessidade de
esperar por cada resposta, no qual serão recebidas
na mesma ordem em que as solicitações foram
enviadas. Este processo é chamado de pipelining.
Pode também dar-se o caso de ser estabelecida uma
conexão sem pipelining, em que o cliente só faz nova
requisição quando o servidor lhe envia a resposta, ou
seja, o servidor fica inactivo até o objecto (.html,
.gif, .css, etc) atingir o seu destino no cliente.
O protocolo HTTP
Se, na versão 1.1, uma requisição incluir o
cabeçalho Connection: close, a conexão será
encerrada após o envio da resposta
correspondente. Utiliza-se este cabeçalho
quando não há suporte a conexões persistentes,
quando for a última requisição a ser enviada
nesta conexão, ou ainda, sempre que quiser
encerrar a conexão mesmo que nem todas as
requisições tenham sido completadas. Além
disso, o servidor pode fechar uma conexão se
estiver ociosa por um determinado período de
tempo.
O protocolo HTTP
Principais servidores:
• Apache (http://www.apache.org))
• Websphere (
http://www-136.ibm.com/developerworks/websphere/)
• Tomcat (http://jakarta.apache.org/tomcat/)
• Jboss (http://www.jboss.org/products/jbossas)
O protocolo HTTP
Principais clientes:
• MS Internet Explorer
• Firefox/Netscape/Mozilla
• Opera

You might also like