O protocolo HTTP

Abril 2017

O que é e para que serve o 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 HTTPD nas máquinas UNIX).

Como funciona a comunicação entre o navegador e o servidor

A comunicação entre navegador e servidor é feita em dois tempos:

Comunicação entre o navegador e o servidor

O navegador efetua um pedido HTTP e o servidor trata o pedido e, em seguida, envia uma resposta HTTP. Na verdade, a comunicação é mais demorada se considerarmos o processamento do pedido pelo servidor. Já que vamos nos interessar apenas pelo protocolo HTTP, o processamento do servidor não será esclarecido neste artigo.

Como é realizada o Requisição e Resposta HTTP

Um pedido HTTP é um conjunto de linhas enviado ao servidor pelo navegador. Ele compreende uma linha de pedido, que é a linha que especifica o tipo de documento solicitado, o método a ser aplicado e a versão do protocolo utilizada. A linha compreende três elementos que devem ser separados por um espaço: o método, o URL e a versão do protocolo usado pelo cliente (geralmente HTTP/1.0).

Também fazem parte do pedido HTTP os campos de cabeçalho do pedido, que é um conjunto de linhas facultativas que permitem dar informações adicionais sobre o pedido e/ou o cliente (navegador, sistema operacional, etc.). 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.

Por fim, há o corpo do pedido, conjunto de linhas opcionais que devem ser separadas das linhas precedentes por uma linha vazia e que permite, por exemplo, um envio de dados com um comando POST durante a comunicação com o servidor, através de um formulário.

Um pedido HTTP tem a seguinte sintaxe (<crlf> significa quebra 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)

Lista dos comandos ou códigos HTTP

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
DELETERemoção do recurso situado no URL especificado

Como são estruturados os cabeçalhos

Nome do cabeçalho
Descrição
Accept
Tipo de conteúdo aceito pelo browser (ex: text/HTML). Ver tipos MIMO
Accept-CharsetJogo de caracteres esperado pelo browser
Accept-EncodingCodificação de dados aceite pelo browser
Accept-LanguageLinguagem esperada pelo browser (inglês por padrão)
AuthorizationIdentificação do browser junto ao 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 (ex: text/HTML). Ver MIMO
DateData de início de transferência dos dados
ForwardedUtilizado pelas máquinas intermediárias entre o browser e o servidor
FromPermite especificar o e-mail do cliente
FromPermite especificar se o documento deve ser enviado caso tenha sido alterado a partir de uma certa data
LinkRelação entre dois URLs
Orig-URLURL de origem do pedido
RefererURL do link 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 operacional

Como a resposta HTTP é executada

Uma resposta HTTP é um conjunto de linhas enviadas ao navegador pelo servidor. Ela compreende uma linha de status, que especifica a versão do protocolo utilizado e o estado do processamento do pedido através de um código e de um texto explicativo e é composta por três elementos separados por um espaço: versão do protocolo utilizado, código de status e significado do código.

Além disso, há os campos do cabeçalho da resposta, conjunto de linhas facultativas que dão informações suplementares sobre a resposta e/ou o servidor. Cada linha é composta de um nome que qualifica o tipo de cabeçalho seguido de dois pontos (:) e do valor do mesmo. Ao final, está o corpo da resposta, que contém o documento pedido.

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

EXPLICAÇÃO DO CÓDIGO DA VERSÃO-HTTP<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 são os cabeçalhos de resposta

Nome do cabeçalho
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 (ex: text/HTML). Ver MIMO
DateData de início de transferência dos dados
ExpiresData limite de consumo dos dados
ForwardedUtilizado pelas máquinas intermediárias entre o browser e o servidor
LocationRedirecionamento para um novo URL associado ao documento
ServerCaracterísticas do servidor que envia a resposta

Quais são os ó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, onde o primeiro indica a classe de status, 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 o 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 a ser retornada
205RESET CONTENTO servidor indica ao navegador para excluir o conteúdo dos campos de um formulário
206PARTIAL CONTENTTrata-se de uma resposta a um pedido que comporta o cabeçalho range. O servidor deve indicar o cabeçalho 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 um novo URL, mas 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 efetuou um comando GET condicional (perguntando se o documento foi alterado desde a última vez) e se o documento não tiver sido alterado, ele 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 foi recusado
404NOT FOUNDMuito comum! 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 passarela ou um proxy
503SERVICE UNAVAILABLEO servidor não pode responder no momento, pois o tráfego está muito denso (todas as linhas do seu correspondente estão ocupadas, tente novamente)
504GATEWAY TIMEOUTA resposta do servidor demorou muito em relação ao que a gateway foi preparada para recebê-la (o tempo que lhe estava destinado esgotou-se)

Para mais informações sobre o protocolo HTTP, é melhor consultar o RFC 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
Última modificação: 20 de abril de 2017 às 11:41 por Pedro.Saude.
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.