O protocolo HTTP

Março 2017

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 então transferir mensagens com cabeçalhos que descrevem o conteúdo da mensagem utilizando uma codificação de tipo MIMO.

O objetivo do protocolo HTTP é permitir uma transferência de arquivos (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).

Como se faz a 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 efetua um pedido HTTP
O servidor trata o pedido e depois envia uma resposta HTTP. A comunicação efetua-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.

Como se faz o pedido HTTP

Um pedido HTTP é um conjunto de linhas enviado ao servidor pelo navegador. Ele 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 uma 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 durante o envio de dados ao servidor por um formulário.

Um pedido HTTP tem, então, a seguinte sintaxe (<crlf> significa salto de linha):
VERSÃO DO METODO DO URL <crlf>  
Cabeçalho: Valor <crlf>
.
.
.
Cabeçalho: Valor <crlf>
Linha vazia<crlf>
CORPO DO PEDIDO


Veja um exemplo de pedido HTTP:
GET http://br.ccm.net HTTP/1.0  
Accept : text/html
If-Modified-Since : Saturday, 15-January-2017 14:37:11 GMT
User-Agent : Mozilla/52.0.1 (compatível; MSIE 5.0; Windows 10)

Quais são os comandos

ComandoDescrição
GETPedido do recurso situado no URL especificado
HEADPedido do cabeçalho do recurso situado no URL especificado
POSTEnvio de dados ao programa situado no URL especificado
PUTEnvio de dados ao URL especificado
DELETESupressão do recurso situado no URL especificado

Como funcionam as 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 padrão)
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 intermediárias 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 efetuado
User-AgentCadeia dando informações sobre o cliente, como o nome e a versão do navegador, do sistema de exploração

Como se estrutura a 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 e o 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 uma 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: contém o documento pedido

Uma resposta HTTP tem a seguinte sintaxe (<crlf> significa salto de linha):
VERSÃO-HTTP CÓDIGO EXPLICAÇÃO<crlf>  
Cabeçalho: Valor <crlf>
.
.
.
Cabeçalho: Valor<crlf>
Linha vazia<crlf>
CORPO DA RESPOSTA


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

Como se compõe o 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 intermediárias entre o motor de pesquisa e o servidor
LocationRedirecionamento para uma nova URL associada ao documento
ServerCaracterísticas do servidor que envia a resposta

Quais são os códigos de resposta

São os códigos que você vê quando o navegador não 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 os seguintes a natureza exata do erro.


CódigoMensagem Descrição
10xMensagem de informaçãoEstes códigos não são utilizados na versão 1.0 do protocolo
20xSucessoEstes códigos indicam o bom desenrolar da transação
200OKO pedido foi realizado corretamente
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 aceito, 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 para 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 RedirecionamentoEstes códigos indicam que o recurso não está mais 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 um outro método além do GET
304NOT MODIFIEDSe o cliente efetuar 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á incorreto
400BAD REQUESTA sintaxe do pedido está mal formulada ou é impossível de validar
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 dados de autorização corretos
402PAYMENT REQUIREDO cliente deve reformular o seu pedido com os dados de pagamento corretos
403FORBIDDENO acesso ao recurso é recusado
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 no servidor
500INTERNAL ERRORO servidor encontrou uma condição inesperada que o impediu de satisfazer o pedido
501NOT IMPLEMENTEDO servidor não suporta o serviço pedido
502BAD GATEWAYO servidor recebeu uma resposta inválida por parte do servidor que tentava acessar agindo como uma ponte ou um proxy
503SERVICE UNAVAILABLEO servidor não pode responder no momento, porque o tráfego é muito denso (todas as linhas do seu correspondente são ocupadas, tente novamente)
504GATEWAY TIMEOUTA resposta do servidor demorou muito tempo para a ponte que estava preparada para recebe-la (o tempo que estava destinado à ela esgotou-se.)

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 (versão original), RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1 (versão original) e Cookies

Veja também


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
Polityka prywatności
Polityka prywatności
Este documento, intitulado 'O protocolo HTTP', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.