You are on page 1of 8

Hypertext Transfer Protocol

1
Hypertext Transfer Protocol
|+ Protocolos Internet (TCP/IP) Hypertext Transfer Protocol (ou o acrnimo HTTP; do ingls, Protocolo de
Transferncia de Hipertexto) um protocolo de comunicao (na camada de aplicao segundo o Modelo OSI)
utilizado para sistemas de informao de hipermedia distribudos e colaborativos.
[1]
Seu uso para a obteno de
recursos interligados levou ao estabelecimento da World Wide Web.
Coordenado pela World Wide Web Consortium e a Internet Engineering Task Force, culminou na publicao de uma
srie de Requests for Comments; mais notavelmente o RFC 2616, de junho de 1999, que definiu o HTTP/1.1.
Normalmente, este protocolo utiliza o porta 80 e usado para a comunicao de stios web, comunicando na
linguagem HTML. Contudo, para haver comunicao com o servidor do stio necessrio utilizar comandos
adequados, que no esto em linguagem HTML.
Para acedermos a outro documento a partir de uma palavra presente no documento actual podemos utilizar
hiperligaes (ou ncoras). Estes documentos se encontram no stio com um endereo de pgina da Internet - e para
acess-los deve-se digitar o respectivo endereo, denominado URI (Universal Resource Identifier ou Identificador
Universal de Recurso), que no deve ser confundir com URL (Universal Resource Locator ou Localizador Universal
de Recurso), um tipo de URI que pode ser directamente localizado.
Prefcio
O HyperText Transfer Protocol um protocolo de aplicao responsvel pelo tratamento de pedidos e respostas
entre cliente e servidor na World Wide Web. Ele surgiu da necessidade de distribuir informaes pela Internet e para
que essa distribuio fosse possvel foi necessrio criar uma forma padronizada de comunicao entre os clientes e
os servidores da Web e entendida por todos os computadores ligados Internet. Com isso, o protocolo HTTP passou
a ser utilizado para a comunicao entre computadores na Internet e a especificar como seriam realizadas as
transaces entre clientes e servidores, atravs do uso de regras bsicas.
[]
Este protocolo tem sido usado pela WWW desde 1990. A primeira verso de HTTP, chamada HTTP/0.9, era um
protocolo simples para a transferncia de dados no formato de texto ASCII pela Internet, atravs de um nico
mtodo de requisio, chamado GET. A verso HTTP/1.0 foi desenvolvida entre 1992 e 1996 para suprir a
necessidade de transferir no apenas texto. Com essa verso, o protocolo passou a transferir mensagens do tipo
MIME44 (Multipurpose Internet Mail Extension) e foram implementados novos mtodos de requisio, chamados
POST e HEAD.
No HTTP/1.1, verso actual do protocolo descrito na RFC 2616,
[2]
foi desenvolvido um conjunto de
implementaes adicionais ao HTTP/1.0, como por exemplo: o uso de conexes persistentes; o uso de servidores
proxy que permitem uma melhor organizao da cache; novos mtodos de requisies; entre outros. Afirma-se que o
HTTP tambm usado como um protocolo genrico para comunicao entre os agentes de utilizadores e
proxies/gateways com outros protocolos, como o SMTP, NNTP, FTP, Gopher, e WAIS, permitindo o acesso a
recursos disponveis em aplicaes diversas.
[2]
Hypertext Transfer Protocol
2
Funcionamento
Um sistema de comunicao em rede possui diversos protocolos que trabalham em conjunto para o fornecimento de
servios. Para que o protocolo HTTP consiga transferir seus dados pela Web, necessrio que os protocolos TCP e
IP (Internet Protocol, Protocolo de Internet) tornem possvel a conexo entre clientes e servidores atravs de sockets
TCP/IP.
De acordo com Fielding,
[3]
o HTTP utiliza o modelo cliente-servidor, como a maioria dos protocolos de rede,
baseando-se no paradigma de requisio e resposta. Um programa requisitante (cliente) estabelece uma conexo com
um outro programa receptor (servidor) e envia-lhe uma requisio, contendo a URI, a verso do protocolo, uma
mensagem MIME (padro utilizado para codificar dados em formato de textos ASCII para serem transmitidos pela
Internet) contendo os modificadores da requisio, informaes sobre o cliente e, possivelmente, o contedo no
corpo da mensagem.
O servidor responde com uma linha de status (status line) incluindo sua verso de protocolo e um cdigo de
operao bem sucedida ou um cdigo de erro, seguido pelas informaes do servidor, metainformaes da entidade e
possvel contedo no corpo da mensagem. Aps o envio da resposta pelo servidor, encerra-se a conexo
estabelecida.
Mensagem HTTP
O protocolo HTTP faz a comunicao entre o cliente e o servidor atravs de mensagens. O cliente envia uma
mensagem de requisio de um recurso e o servidor envia uma mensagem de resposta ao cliente com a solicitao.
Segundo Foscarini,
[4]
os dois tipos de mensagens existentes no protocolo utilizam um formato genrico, definido na
RFC 822, para a transferncia de entidades.
Uma mensagem, tanto de requisio quanto de resposta, composta, conforme definido na RFC 2616,
[5]
por uma
linha inicial, nenhuma ou mais linhas de cabealhos, uma linha em branco obrigatria finalizando o cabealho e por
fim o corpo da mensagem, opcional em determinados casos. Nessa seo sero apresentados os campos que
compem uma mensagem mais detalhadamente; ou seja, o HTTP apresenta o stio ou local onde est a pgina da
Internet.
Cabealho da mensagem
O cabealho da mensagem (header) utilizado para transmitir informaes adicionais entre o cliente e o servidor.
Ele especificado imediatamente aps a linha inicial da transao (mtodo), tanto para a requisio do cliente
quanto para a resposta do servidor, seguido de dois pontos (:) e um valor. Existem quatro tipos de cabealhos que
podero ser includos na mensagem os quais so: general-header, requestheader, response-header e entity-header.
[6]
Esses cabealhos so utilizados para enviar informaes adicionais sobre a mensagem transmitida (general-header),
a requisio e os clientes (request-header) que comunicam suas configuraes e os formatos de documentos
desejados como resposta.
[7]
Alm disso, so utilizados pelo servidor ao retornar o recurso no qual foi requisitado
pelo cliente, para transmitir informaes que descrevem as configuraes do servidor e do recurso identificado pelo
URI de requisio, e que no pertence linha de status (responseheader). Na RFC 2616,
[8]
esto descritos todos os
campos que pertencem a esses cabealhos.
Hypertext Transfer Protocol
3
Alguns tipos MIME
[9]
Exemplo Descrio
text/plain Arquivo no formato texto (ASCII)
text/html Arquivo no formato HTML,
utilizado
como padro para documentos Web
Image/gif Imagem com o formato GIF
Image/jpeg Imagem com o formato JPEG
application/zip Arquivo compactado
Corpo da mensagem
Uma mensagem HTTP pode conter um corpo de dados que so enviados abaixo das linhas de cabealho. 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 no seja possvel. J em uma mensagem de requisio, o corpo pode conter dados que
sero enviados diretamente pelo usurio ou um arquivo que ser enviado para o servidor. Quando uma mensagem
HTTP tiver um corpo, podero ser includos cabealhos de entidades que descrevem suas caractersticas, 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 contm. A tabela ao lado apresenta alguns tipos MIME.
Requisio
De acordo com Fielding,
[10]
uma mensagem de requisio do cliente composta pelos seguintes campos: uma linha
inicial (Request-Line); linhas de cabealhos (Request-header); uma linha em branco obrigatria e um corpo de
mensagem opcional. A linha inicial de uma requisio composta por trs partes separadas por espaos: o mtodo
(Method), a identificao do URI (Request-URI) e a verso do HTTP (HTTP-Version) utilizado.
Segundo Bastos & Ladeira,
[11]
Request-URI um identificador uniforme de recurso (Uniform Resource Identifier)
que identifica sobre qual recurso ser aplicada a requisio. No protocolo HTTP, o tipo de URI utilizado chamado
de URL (Uniform Resource Locater), composto pela identificao do protocolo, pelo endereo do computador
servidor e pelo documento requisitado.
[12]
Mtodos
O protocolo HTTP define oito mtodos que indicam a ao a ser realizada no recurso especificado. Conforme Bastos
e Ladeiras,
[13]
o mtodo determina o que o servidor deve fazer com o URL fornecido no momento da requisio de
um recurso. Um servidor HTTP deve implementar ao menos os mtodos GET e HEAD.
GET
Solicita algum recurso como um arquivo ou um script CGI (qualquer dado que estiver identificado pelo URI) por
meio do protocolo HTTP. Por exemplo, segue abaixo uma comunicao entre um cliente e um servidor HTTP. O
servidor possui a URL www.exemplo.com, porta 80.
O 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 cabealho Host reconhece vrios diferentes nomes DNS que tenham o mesmo IP.
Hypertext Transfer Protocol
4
A resposta do servidor (seguida por uma linha em branco e o texto da pgina solicitada):
HTTP/1.1 200 OK
Date: Mon, 23May 200522:38:34 GMT
Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Etag: "3f80f-1b6-3e1cb03b"
Accept-Ranges: bytes
Content-Length: 438
Connection: close
Content-Type: text/html; charset=UTF-8
HEAD
Variao do GET em que o recurso no retornado. usado para obter metainformaes por meio do cabealho da
resposta, sem ter que recuperar todo o contedo.
POST
Envia dados para serem processados (por exemplo, dados de um formulrio HTML) para o recurso especificado. Os
dados so includos no corpo do comando. Sua utilizao em uma requisio ocorre quando necessrio enviar
dados ao servidor para serem processados, geralmente por um programa script identificado no Request-URI. Uma
requisio por meio desse mtodo sempre requer que as informaes submetidas sejam includas no corpo da
mensagem e formatadas como uma query string, alm de conter cabealhos adicionais especificando seu tamanho
(Content-Lenght) e seu formato (Content-Type). Por isso, esse mtodo oferece uma maior segurana em relao aos
dados transferidos, ao contrrio do mtodo GET que os dados so anexados a URL, ficando visveis ao usurio.
[14]
Por exemplo:
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
PUT
Envia certo recurso.
DELETE
Exclui o recurso.
TRACE
Ecoa o pedido, de maneira que o cliente possa saber o que os servidores intermedirios esto mudando em seu
pedido.
OPTIONS
Recupera os mtodos HTTP que o servidor aceita.
CONNECT
Serve para uso com um proxy que possa se tornar um tnel SSL (um tnel pode ser usado, por exemplo, para criar
uma conexo segura).
Hypertext Transfer Protocol
5
Resposta
Para Fielding,
[15]
uma mensagem de resposta do servidor composta pelos seguintes campos: uma linha inicial
(Status-Line); linhas de cabealhos (Responseheader); uma linha em branco obrigatria e um corpo de mensagem
opcional. A linha inicial de uma resposta, chamada de linha de status, possui por sua vez trs partes separadas por
espaos: a verso do protocolo HTTP (HTTP-Version), um cdigo de status (Status-Code) da resposta, que fornece o
resultado da requisio, e uma frase de justificativa (Reason-Phrase) que descreve o cdigo do status.
Cdigos de retorno
A linha inicial de uma resposta HTTP indica ao cliente se sua requisio foi bem sucedida ou no.
[16]
Essa situao
fornecida atravs de um cdigo de retorno (Status-Code) e uma frase explicativa (Reason-Phrase). De acordo com
Fielding,
[17]
o cdigo de status formado por trs dgitos e o primeiro dgito representa a classe que pertence
classificada em cinco tipos:
1xx: Informational (Informao) utilizada para enviar informaes para o cliente de que sua requisio foi
recebida e est sendo processada;
2xx: Success (Sucesso) indica que a requisio do cliente foi bem sucedida;
3xx: Redirection (Redirecionamento) informa a ao adicional que deve ser tomada para completar a requisio;
4xx: Client Error (Erro no cliente) avisa que o cliente fez uma requisio que no pode ser atendida;
5xx: Server Error (Erro no servidor) ocorreu um erro no servidor ao cumprir uma requisio vlida.
O protocolo HTTP define somente alguns cdigos em cada classe descritos na RFC 2616, mas cada servidor pode
definir seus prprios cdigos.
Conexes
Segundo Hirata,
[18]
o HTTP/1.0 um protocolo sem estado. Isto significa que as conexes entre um cliente e um
servidor so encerradas aps o envio de cada requisio ou resposta. Cada vez que uma conexo estabelecida ou
encerrada, consumida uma grande quantidade de tempo da CPU, de largura de banda e de memria.
Na maioria das vezes, para se obter o resultado esperado, necessrio realizar mais de uma solicitao de recursos
atravs de vrias conexes. Por exemplo, no caso de uma pgina Web, que consiste de diversos arquivos (.html, .gif,
.css, etc) preciso que sejam feitas vrias requisies para compor a pgina, uma conexo no-persistente. O ideal
seria que apenas uma conexo fosse utilizada para os pedidos e as respostas HTTP, diminuindo, assim, a sobrecarga
ocasionada pelas conexes, uma conexo persistente.
A conexo persistente, implementada como conexo padro no protocolo HTTP/1.1, possibilita que uma conexo
seja estabelecida para enviar vrias requisies em seqncia sem a necessidade de esperar por cada resposta, no
qual sero recebidas na mesma ordem em que as solicitaes foram enviadas, um processo chamado de
pipelining.
[19]
Pode tambm dar-se o caso de ser estabelecida uma conexo sem pipelining, em que o cliente s faz
nova requisio 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.
Se uma requisio incluir o cabealho Connection: close, a conexo ser encerrada aps o envio da resposta
correspondente. Utiliza-se este cabealho quando no h suporte a conexes persistentes, quando for a ltima
requisio a ser enviada nesta conexo, ou ainda, sempre que quiser encerrar a conexo mesmo que nem todas as
requisies tenham sido completadas. Alm disso, o servidor pode fechar uma conexo se estiver ociosa por um
determinado perodo de tempo.
Hypertext Transfer Protocol
6
Outros protocolos
Existem outros tipos de protocolos como o FTP (File Transfer Protocol, ou Protocolo de Transferncia de Arquivos),
usado para envio de arquivos do computador para um servidor na Web, o SMTP (Simple Mail Transfer Protocol, ou
Protocolo de Transferncia de Correio Simples), protocolo usado para correio eletrnico, entre outros protocolos.
Esquema de comunicao
Pedido bsico de HTTP cliente-servidor:
GET <ficheiro> HTTP/1.1
Host: <ip>
User-Agent: <Agente>
Connection: <tipo>
O agente quem faz a ligao ao servidor, normalmente um navegador. O tipo indica como o servidor deve proceder
com a conexo. comumente utilizado para requisies persistentes.
Uma requisio completa pode exigir muitas informaes. A requisio abaixo - utilizando o mtodo POST - fora
retirada do Mozilla Firefox v3.6b5 (pt-BR, para Windows):
POST /diretorio/arquivo.html HTTP/1.1
Host: www.exemplo.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; pt-BR; rv:1.9.2b5) Gecko/20091204 Firefox/3.6b5
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: pt-br,pt;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-alive: 115
Cookie: nome=valor; nome2=valor2
Connection: keep-alive
Content-Length: 28
usuario=exemplo&senha=123456
[1] T. Berners-Lee et all, 1996
[2] Fielding et al 1999, p. 7
[3] Fielding et al (1999, p. 10)
[4] Foscarini (2001, p. 13)
[5] Fielding et al, 1999, p. 21
[6] cf. Fielding et al, 1999, p. 21
[7] cf. Bastos & Ladeira, 2001
[8] cf. Fielding et al, 1999
[9] Fonte: Fielding et al, 1999
[10] Fielding (1999, p. 24)
[11] Bastos & Ladeira
[12] cf. Embratel, 2002
[13] Bastos & Ladeiras (2001)
[14] Herrmann, 1997
[15] Fielding et al (1999, p. 26)
[16] cf. Herrman, 1997, p. 53
[17] Fielding et al (1999, p. 37)
[18] Hirata, 1999
[19] cf. Fielding et al, 1999, p. 30
Hypertext Transfer Protocol
7
Referncias
T. Berners-Lee, R. Fielding, H. Frystyk (maio de 1996). Hypertext Transfer Protocol -- HTTP/1.0 (http:/ / www.
rfc-editor. org/ cgi-bin/ rfcdoctype. pl?loc=RFC& letsgo=1945& type=ftp& file_format=txt) (em ingls). Internet
Engineering Task Force. Pgina visitada em 21 de junho de 2009.
BASTOS, Leonara de Oliveira; LADEIRA, Adriane Cristina. Protocolo HTTP.
cf. 46 HERRMANN, Eric. Aprenda em 1 semana programao CGI em Perl 5. Rio de Janeiro: Campus, 1997
Ligaes externas
Desenvolvimento do protocolo HTTP (http:/ / www. w3. org/ Protocols/ ) (em ingls)
Fontes e Editores da Pgina
8
Fontes e Editores da Pgina
Hypertext Transfer Protocol Fonte: http://pt.wikipedia.org/w/index.php?oldid=21369347 Contribuidores: 333, AToulouse-105-2-2-8.abo.wanadoo.fr, Adailton, Agil, Alchimista, Alexanderps,
Alexandre Skupien, Beetstra, Bisbis, BrunoGunter, Burmeister, Carlos28, Daimore, Der kenner, Diotti, Ee910285, Ejoelson, Epicurean, EuTuga, GOE2, GRS73, Giro720, Gunnex, Gustavo
Siqueira, Hmy1968, Jonatan Zanluca, Jorge, Kitto, Korsch, Lechatjaune, Leonardo.stabile, LeonardoRob0t, Manuel Anastcio, Marcos-cruz, Mvdiogo, Nilsonromero, Novais, Nuno Tavares,
OS2Warp, Orium, Osias, PatrciaR, PauloColacino, Pexe, Pousadaaltomar, Rafael Brando, Rjclaudio, Ruy Pugliesi, Santosga, Setheus, Tumnus, VMF12, Yuri.ccp, 174 edies annimas
Licena
Creative Commons Attribution-Share Alike 3.0 Unported
http:/ / creativecommons. org/ licenses/ by-sa/ 3. 0/