A ESTRUTURA DO PROTOCOLO HTTP
Rodrigo Albino
27/05/2009
1. INTRODUÇÃO
O HTTP (hyper text transfer protocol) surgiu em
1990 sendo intitulado de HTTP 0.9 para WWW,
tendo como finalidade apenas a transferência dos
dados sem nenhuma formatação na internet. Em
maio de 1990 o IETF publicou a RFC 1945 que
regulamentou uma nova versão, surgindo então o
HTTP 1.0, que acrescentou a formatação de dados
do tipo MIME e a meta-informação sobre os dados
transmitidos, mudou também a forma de requisição e
respostas e desconsiderou os poxys hierárquicos.
Após a criação da RFC 1945 houve duas
atualizações, em janeiro de 1997 surgiu o HTTP 1.1
com a RFC 2068 e logo em seguida em junho de
1999 a RFC 2616 padronizando o HTTP 1.1 até os
dias de hoje.
O protocolo HTTP é utilizado na camada de
aplicação da rede segundo o Modelo OSI, é
responsável por determinar as regras utilizadas na
comunicação entre o cliente e servidor para intranets
e World Wide Web. Seu objetivo é dar eficiência na
transferência de dados multimídia, podendo ser
áudio, vídeo, imagens, textos, hiper-texto dentre
outros. Seu protocolo é simples e utiliza 4
procedimentos, conexão, requisição, resposta e
desconexão. Na Requisição, o cliente faz uma
requisição ao servidor que é seguida por uma
mensagem do tipo MIME (Multipurpose Internet
Mail Extension) que possui modificações da
requisição; Resposta, o servidor logo após o
recebimento envia uma linha de confirmação
contendo a versão do protocolo e o código de
sucesso ou erro; Conexão, pode ser direta ou
intermediada podemos citar o proxy que reescreve
uma parte da mensagem quando for necessário e o
gateway que faz uma tradução entre diferentes
protocolos quando é necessário e também temos o
tunelamento que não modifica nenhuma mensagem.
Este trabalho relata a estrutura e funcionamento do
protocolo HTTP, na seção 2 descreve o
funcionamento, na seção 3 descreve sobre
mensagens HTTP, na seção 4 descreve o cabeçalho,
corpo da mensagem e a requisição, na seção 5 os
métodos como resposta, códigos de retorno,
conexões e outros tipos de protocolo, na seção 6 um
breve relato sobre o protocolo HTTPS .
2. FUNCIONAMENTO
Para que aja a comunicação cliente\servidor é
necessário que o cliente faça uma conexão
TCP/IP(Internet Protocol), criando uma socket no
servidor utilizando normalmente a porta 80 e o
servidor aceite a conexão TCP/IP do cliente para que
as trocas de mensagens HTTP entre o browser e o
servidor Web sejam realizadas (Requisição e
Resposta)[3]. Essa Comunicação com o servidor é
feita através da linguagem HTML, porém para haver
controle sobre os procedimentos é necessário utilizar
comandos adequados que a linguagem HTML não
possui.
A Comunicação é estabelecida quando o cliente envia
uma requisição URI para o servidor que contem as
informações da versão do protocolo utilizada, e uma
mensagem MIME que codifica o texto em formato
ASCII para o envio, modificando a requisição e
informando ao cliente o conteúdo do texto. O Servidor
responde o status e inclui uma linha com sua versão do
protocolo e um código contendo se houve ou não erro
na informação.
3. MENSAGENS HTTP
As Mensagens utilizadas tanto pelo cliente como pelo
servidor utilizando um formato genérico na
transferência de entidades [4].
A RFC 2616 de 1999, determina que a mensagem é
composta por um linha em branco, uma ou mais linhas
compondo o cabeçalho sempre sendo finalizado por
uma linha em branco, e o corpo da mensagem no final
é opcional dependendo do procedimento.
4. CABEÇALHO DA MENSAGEM
A utilização do cabeçalho para adicionar informações
na mensagem para serem enviadas entre o cliente e
servidor, é posicionada logo após a linha inicial tanto
para a requisição quanto para a resposta seguida de
dois pontos com um valor.
A utilização do cabeçalho possui 4 variações que são
elas: general-header, request-header, response-header
e entity-header [3].
4.1 Corpo da Mensagem
O Corpo da Mensagem HTTP fica localizado abaixo
do cabeçalho, no caso de uma mensagem de resposta o
corpo da mensagem é o resultado que foi solicitado
pelo cliente, podendo ter como resultado também o
erro. Na mensagem de requisição o corpo de dados
pode ser enviado diretamente pelo usuário ou até
mesmo um arquivo enviado ao servidor.
Quando for detectado que a mensagem HTTP possui
um corpo, seu cabeçalho recebe suas características
como o Content-Type e o Content-Length, que
representa o tipo MIME e a quantidade de bytes
conseqüentemente.
1
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
Fig. 4.1 - Tipos de Mensagens
4.2 Requisição
A estrutura de uma mensagem de requisição é
composta pelas seguintes divisões: Linha inicial
(Resquest-Line); Linhas de cabeçalhos (Requestheader); Linha em branco obrigatória após o
cabeçalho; Corpo da mensagem opcional; A
Resquest-Line é composto por três partes utilizadas
sendo dividida por espaços: O Method, o RequestURI e o HTTP-Version. O Request-URI identifica
qual recurso será aplicado a requisição, e no
protocolo HTTP a URI é denominado URL
(Uniform Resource Locater), que contem a
identificação do protocolo, o endereço do servidor e
o documento requisitado [3].
O método PUT faz o upload de arquivo contido no
corpo da mensagem para o caminho especificado no
campo URL.
O DELETE exclui arquivo especificado no campo
URL.
O TRACE transmite o pedido de forma que o cliente
saiba que o servidor está mudando o seu pedido.
O OPTIONS faz a recuperação dos métodos HTTP
que o servidor reconheça.
O CONNECT é destinado a Proxy ou túnel SSL de
forma segura.
5.1 Resposta
A estrutura de uma mensagem de resposta do servidor
é composta pelas seguintes divisões: Linha inicial
(Status-Line); Linhas de cabeçalhos (Responseheader); Linha em branco obrigatória após o
cabeçalho; Corpo da mensagem opcional; A ResquestLine é composta por três partes utilizadas sendo
dividida por espaços: O HTTP-version, o Status-Code
e o Reason-Phrase.
Fig. 5.1 - Mensagem de Resposta HTTP
Fig. 4.1 - Mensagem de Requisição HTTP
5. MÉTODOS
A divisão dos métodos utilizados pelo protocolo
HTTP são definidos em oito, para indicar qual será a
ação realizada no recurso especificado, no caso da
URL o servidor utilizando os métodos determina o
que fazer.
O método GET é o mais comum, faz uma solicitação
de algum recurso podendo ser arquivos ou script
através do protocolo HTTP, sendo aceito por todos
os servidores.
O método HEAD é semelhante ao método GET
mudando apenas o retorno do recurso, é utilizado
para captar meta-informação através do cabeçalho de
resposta, sem recuperar todo o conteúdo.
O método POST encaminha as informações para
processamento no recurso específico, os dados são
embutidos no corpo do comando, muito comum
quando os dados têm que ser processados nos
servidores por um programa de script (RequestURI). Por utilizar no cabeçalho informações como
(Content-Lenght) e (Content-Type) proporciona
maior segurança na transferência dos dados.
5.2 Códigos de retorno
A resposta do HTTP é o Status-Line que indica se a
requisição foi bem sucedida ou deu algum erro, isso é
possível através de um código de retorno (StatusCode) e uma frase explicativa (Reason-Phrase), que
são formados por três dígitos, o primeiro dígito
representa a classe.
São divididos em cinco tipos:
1xx: Informação – utilizada para enviar confirmação
ao cliente de que sua requisição foi recebida e está
sendo processada; Ex. 100 - Confirmado
2xx: Sucesso – indica que a requisição do cliente foi
bem sucedida; Ex. 200 – OK, 201- Criado, 204 – Sem
Conteúdo.
3xx: Redirecionamento – informa a ação adicional que
deve ser tomada para completar a requisição; Ex. 304
– Não modificado.
4xx: Erro no cliente – avisa que o cliente fez uma
requisição que não pode ser atendida; Ex. 400 –
Pedido mal formado, 401 – Não tem autorização.
5xx: Erro no servidor – ocorreu um erro no servidor ao
cumprir uma requisição válida. Ex. 501 – Comando
não implementado.
O protocolo HTTP especifica alguns códigos em cada
classe, porém cada servidor pode definir seus próprios
códigos.
2
5.3 Conexões
O HTTP 1.0 é um protocolo não persistente, sua
conexão entre o cliente e o servidor se encerra logo
após o envio de cada requisição ou resposta. Com
isso o aumento do consumo de processamento,
memória e banda são inevitáveis. Na busca de se
obter um resultado muitas vezes são necessários
realizar várias solicitações através de várias
conexões, no caso de se abrir um Web Site que
contenha código HTML, imagens gif, dentre outras.
O HTTP 1.1 é um protocolo persistente que
possibilita várias requisições simultâneas sem a
necessidade de esperar respostas, e as mesmas serão
recebidas na mesma ordem das solicitações, essa
estrutura é chamada de pipelining. A conexão com
pipelining pode também não ser realizada, no caso
em que o servidor fique inativo até que o objeto
HTML, imagem, chegue ao destino no cliente.
5.4 Outros Protocolos
Há outros tipos de protocolos como o FTP
(Protocolo de Transferência de Arquivo), o SMTP
(Protocolo de Transferência de Correio Eletrônico
Simples), TELNET (Protocolo de Acesso Terminal
Remoto), dentre outros.
diferentes tipos de tarefas, usando os métodos de
requisição e resposta, cabeçalhos e códigos de erros.
8. REFERÊNCIA
[ 1 ] T. Berners, R. Fielding e H. Frystyk. “RFC 1945:
Hypertext Transfer Protocol -- HTTP/1.0”. Maio 1996.
[ 2 ] R. Fielding, J. Gettys, J. Mogul, T. Berners, H.
Frystyk. “RFC 2068: Hypertext Transfer Protocol -HTTP/1.1”. Janeiro 1997.
[ 3 ] R. Fielding, J. Gettys, J. Mogul, H. Frystyk, L.
Masinter, P. Leach, T. Berners. “RFC 2616: Hypertext
Transfer Protocol -- HTTP/1.1”. Junho 1999.
[ 4 ] David H. Crocker. “RFC 822: STANDARD FOR
THE FORMAT OF ARPA INTERNET TEXT
MESSAGES”. Agosto 1982.
[ 5 ] R. Khare, S. Lawrence. “RFC 2817: Upgrading to
TLS Within HTTP/1.1”. Maio 2000.
[ 6 ] E. Rescorla. “RFC 2818: HTTP Over TLS”. Maio
2000.
[ 7 ] http://pt.wikipedia.org/wiki/Web_2.0: acessado
em 28/05/2009
6. HTTPS
Com a necessidade constante de segurança surge o
HTTPS (HyperText Transfer Protocol Secure)
implementado em cima do protocolo HTTP sobre
uma camada segura SSL ou TLS. Com a ajuda
destas camadas adicionais é possível que os dados
sejam transmitidos por uma conexão criptografada e
também verifique a autenticidade do servidor através
de certificados digitais. Enquanto o HTTP utiliza em
sua maioria a porta TCP 80, o HTTPS utiliza a
porta 443. Esse protocolo fica bem evidente quando
entramos em sites seguros ou e-commerce quando
aparece um cadeado garantindo que há certificação
segura da página (SSL) [5] [6].
7. WEB 2.0
Esse termo surgiu em uma apresentação em 2004
pela empresa americana O´Reilly Media, para
especificar a segunda geração de comunicação e
serviços, tendo como conceito a WEB como
plataforma. Este termo não refere a novas
atualizações e especificações técnicas, mais sim a
forma com que a web é encarada pelos usuários e
desenvolvedores. Então podemos definir que a Web
2.0 é um ambiente de interação que engloba
inúmeras linguagens e modificações.[7]
8. CONCLUSÃO
De acordo com sua estrutura e comunicação
podemos definir que o protocolo HTTP possui um
uso genérico, podendo suprir as necessidades de
3
Download

A ESTRUTURA DO PROTOCOLO HTTP Rodrigo Albino 27/05/2009