O protocolo HTTP

Maio 2015

Introdução ao protocolo HTTP

O protocolo HTTP (HyperText Transfer Protocol) é o protocolo mais utilizado na Internet desde 1990. A versão 0.9 destinava-se unicamente a transferir dados na Internet (em especial páginas Web escritas em HTML). A versão 1.0 do protocolo (a mais utilizada) permite doravante transferir mensagens com cabeçalhos que descrevem o conteúdo da mensagem utilizando uma codificação de tipo MIMO.

O objectivo do protocolo HTTP é permitir uma transferência de ficheiros (essencialmente no formato HTML) localizados graças a uma cadeia de caracteres chamada URL entre um navegador (o cliente) e um servidor Web (chamado de resto httpd nas máquinas UNIX).

Comunicação entre navegador e servidor

A comunicação entre o navegador e o servidor faz-se em dois tempos :

Communication entre navigateur et serveur
  • O navegador efectua um pedido HTTP
  • O servidor trata o pedido e seguidamente envia uma resposta HTTP

Na realidade, a comunicação efectua-se em mais tempo se considerarmos o tratamento do pedido pelo servidor. Dado que nos interessamos unicamente pelo protocolo HTTP, o tratamento do lado de servidor não será esclarecido no âmbito deste artigo…
Se este assunto lhe interessar, consulte o artigo sobre o tratamento dos CGI.

Pedido HTTP

Um pedido HTTP é um conjunto de linhas enviado ao servidor pelo navegador. Compreende:

  • Uma linha de pedido : A linha compreende três elementos que devem ser separados por um espaço:
    • O método
    • O URL
    • A versão do protocolo utilizado pelo cliente (geralmente HTTP/1.0)
  • Os campos de cabeçalho do pedido : trata-se de um conjunto de linhas facultativas que permitem dar informações suplementares sobre o pedido e/ou o cliente (Navegador, sistema de exploração,…). Cada um destas linhas é composta por um nome que qualifica o tipo de cabeçalho, seguido de dois pontos (:) e do valor do cabeçalho
  • O corpo do pedido : é um conjunto de linhas opcionais que devem ser separadas das linhas precedentes por uma linha vazia e permitindo por exemplo um envio de dados por um comando POST aquando do envio de dados ao servidor por um formulário



Um pedido HTTP tem por conseguinte a sintaxe seguinte (<crlf> significa regresso salto de linha):

METHODE URL VERSION<crlf>  
EN-TETE : Valeur<crlf>  
.  
.  
.  
EN-TETE : Valeur<crlf>  
Ligne vide<crlf>  
CORPS DE LA REQUETE


Eis então um exemplo de pedido HTTP:

GET http://pt.kioskea.net HTTP/1.0  
Accept : text/html  
If-Modified-Since : Saturday, 15-January-2000 14:37:11 GMT  
User-Agent : Mozilla/4.0 (compatible; MSIE 5.0; Windows 95)

Comandos


ComandoDescrição
GETPedido do recurso situado na URL especificada
HEADPedido do cabeçalho do recurso situado na URL especificada
POSTEnvio de dados ao programa situado na URL especificada
PUTEnvio de dados à URL especificada
DELETESupressão do recurso situado na URL especificada

Rubricas


Nome da rubrica Descrição
Accept Tipo de conteúdo aceite pelo motor de pesquisa (por exemplo text/HTML). Ver tipos MIMO
Accept-CharsetJogo de caracteres esperado pelo motor de pesquisa
Accept-EncodingCodificação de dados aceite pelo motor de pesquisa
Accept-LanguageLinguagem esperada pelo motor de pesquisa (inglês, por defeito)
AuthorizationIdentificação do motor de pesquisa junto do servidor
Content-EncodingTipo de codificação do corpo do pedido
Content-LanguageTipo de linguagem do corpo do pedido
Content-LengthComprimento do corpo do pedido
Content-TypeTipo de conteúdo do corpo do pedido (por exemplo text/HTML). Ver tipos MIMO
DateData de início de transferência dos dados
ForwardedUtilizado pelas máquinas intermédias entre o motor de pesquisa e o servidor
FromPermite especificar o e-mail do cliente
FromPermite especificar que o documento deve ser enviado se tiver sido alterado a partir de uma certa data
LinkRelação entre duas URL
Orig-URLURL de origem do pedido
RefererURL da ligação a partir da qual o pedido foi efectuado
User-AgentCadeia dando informações sobre o cliente, como o nome e a versão do navegador, do sistema de exploração

Resposta HTTP

Uma resposta HTTP é um conjunto de linhas enviadas ao navegador pelo servidor. Compreende:

  • Uma linha de estatuto : é uma linha que precisa a versão do protocolo utilizado e o estado do tratamento do pedido através de um código e de um texto explicativo. A linha compreende três elementos que devem ser separados por um espaço:
    • A versão do protocolo utilizado
    • O código de estatuto
    • A significado do código
  • Os campos de rubrica da resposta : trata-se de um conjunto de linhas facultativas que permitem dar informações suplementares sobre a resposta e/ou o servidor. Cada um destas linhas é composta de um nome que qualifica o tipo de rubrica, seguido de dois pontos (:) e do valor da rubrica
  • O corpo da resposta : contem o documento pedido



Uma resposta HTTP tem por conseguinte a sintaxe seguinte (<crlf> significa salto de linha) :

VERSION-HTTP CODE EXPLICATION<crlf>  
EN-TETE : Valeur<crlf>  
.  
.  
.  
EN-TETE : Valeur<crlf>  
Ligne vide<crlf>  
CORPS DE LA REPONSE


Eis aqui um exemplo de resposta HTTP :

HTTP/1.0 200 OK  
Date : Sat, 15 Jan 2000 14:37:12 GMT  
Server : Microsoft-IIS/2.0  
Content-Type : text/HTML  
Content-Length : 1245  
Last-Modified : Fri, 14 Jan 2000 08:25:13 GMT

CORPO DA RESPOSTA


Nome da rubrica Descrição
Content-Encoding Tipo de codificação do corpo da resposta
Content-LanguageTipo de linguagem do corpo da resposta
Content-LengthComprimento do corpo da resposta
Content-TypeTipo de conteúdo do corpo da resposta (por exemplo text/HTML). Ver tipos MIMO
DateData de início de transferência dos dados
ExpiresData limite de consumo dos dados
ForwardedUtilizado pelas máquinas intermédias entre o motor de pesquisa e o servidor
LocationRedireccionamento para uma nova URL associada ao documento
ServerCaracterísticas do servidor que envia a resposta

Os códigos de resposta

São os códigos que vê quando o navegador não lhe consegue mostrar a página pedida. O código de resposta é constituído por três algarismos: o primeiro indica a classe de estatuto e seguintes a natureza exacta do erro.


CódigoMensagem Descrição
10x</gras>Mensagem de informaçãoEstes códigos não são utilizados na versão 1.0 do protocolo
20x</gras>SucessoEstes códigos indicam o bom desenrolar da transacção
200OKO pedido foi realizado correctamente
201CREATED

Segue um comando POST, indica o sucesso, o corpo do resto do documento deve indicar a URL onde o documento recentemente criado deveria encontrar-se.

202ACCEPTEDO pedido foi aceite, mas o procedimento seguinte não foi realizado
203PARTIAL INFORMATIONQuando este código é recebido em resposta a um comando GET, isto indica que a resposta não está completa.
204NO RESPONSEO servidor recebeu o pedido mas não há informação a devolver
205RESET CONTENTO servidor indica ao navegador para suprimir o conteúdo dos campos de um formulário
206PARTIAL CONTENTTrata-se de uma resposta a um pedido que comporta a rubrica range. O servidor deve indicar a rubrica content-range
30x RedirecçãoEstes códigos indicam que o recurso já não está no lugar indicado
301MOVEDOs dados pedidos foram transferidos para um novo endereço
302FOUNDOs dados pedidos são de uma nova URL, contudo talvez tenham sido deslocados desde então...
303METHODIsto implica que o cliente deve tentar um novo endereço, tentando preferivelmente um outro método além do GET
304NOT MODIFIEDSe o cliente efectuar um comando GET condicional (perguntando se o documento foi alterado desde a última vez) e se o documento não tiver sido alterado, devolve este código.
40xErro devido ao cliente Estes códigos indicam que o pedido está incorrecto
400BAD REQUESTA sintaxe do pedido está mal formulada ou é impossível de satisfazer
401UNAUTHORIZEDO parâmetro da mensagem dá as especificações das formas de autorização aceitáveis. O cliente deve reformular o seu pedido com os bons dados de autorização
402PAYMENT REQUIREDO cliente deve reformular o seu pedido com os bons dados de pagamento
403FORBIDDENO acesso ao recurso é simplesmente proibido
404NOT FOUNDClássico! O servidor não encontrou nada no endereço indicado. Partiram sem deixar endereço…:)
50xErro devido ao servidorEstes códigos indicam que houve um erro interno do servidor
500INTERNAL ERRORO servidor encontrou uma condição inesperada que o impediu de satisfazer o pedido (às vezes acontecem coisas aos servidores…)
501NOT IMPLEMENTEDO servidor não suporta o serviço pedido (não podemos saber fazer tudo, não é?…)
502BAD GATEWAYO servidor recebeu uma resposta inválida por parte do servidor que tentava aceder agindo como uma ponte estreita ou um proxy
503SERVICE UNAVAILABLEO servidor não pode responder-lhe no momento presente, porque o tráfego é demasiado denso (todas as linhas do seu correspondente são ocupadas quererão recordar ulteriormente)
504GATEWAY TIMEOUTA resposta do servidor foi demasiado longa no que diz respeito ao tempo durante o qual a ponte estreita estava preparada para o esperar (o tempo que lhe estava destinado esgotou-se…)

Mais informações

Para mais informações sobre o protocolo HTTP, é melhor consultar oRFC 1945 que explica de maneira detalhada o protocolo :

  • RFC 1945 - Hypertext Transfer Protocol -- HTTP/1.0 (tradução francesa)
  • RFC 1945 - Hypertext Transfer Protocol -- HTTP/1.0 (versão original)
  • RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1 (versão original)
  • Cookies
Para uma leitura offline, é possível baixar gratuitamente este artigo no formato PDF:
O-protocolo-http .pdf

A ver igualmente


The HTTP protocol
The HTTP protocol
El protocolo HTTP
El protocolo HTTP
Das HTTP Protokoll
Das HTTP Protokoll
Le protocole HTTP
Le protocole HTTP
Il protocollo HTTP
Il protocollo HTTP
Este documento, intitulado « O protocolo HTTP »a partir de Kioskea (pt.kioskea.net) está disponibilizado sob a licença Creative Commons. Você pode copiar, modificar cópias desta página, nas condições estipuladas pela licença, como esta nota aparece claramente.