O protocolo HTTP (HyperText Transfer Protocol) é o protocolo mais utilizado na Internet desde 1990. Anteriormente dedicado unicamente a transferir dados na internet (em especial páginas da web escritas em HTML, esse protocolo hoje permite 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.
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.
A comunicação entre navegador e servidor é feita em dois tempos:
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.
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 dessas 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 [ [/ https://br.ccm.net/|blank]] 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)
Comando | Descrição |
---|---|
GET | Pedido do recurso situado no URL especificado |
HEAD | Pedido do cabeçalho do recurso situado no URL especificado |
POST | Envio de dados ao programa situado no URL especificado |
PUT | Envio de dados ao URL especificado |
DELETE | Remoção do recurso situado no URL especificado |
Nome do cabeçalho |
Descrição |
---|---|
Accept |
Tipo de conteúdo aceito pelo browser (ex: text/HTML). Ver tipos MIMO |
Accept-Charset | Jogo de caracteres esperado pelo browser |
Accept-Encoding | Codificação de dados aceite pelo browser |
Accept-Language | Linguagem esperada pelo browser (inglês por padrão) |
Authorization | Identificação do browser junto ao servidor |
Content-Encoding | Tipo de codificação do corpo do pedido |
Content-Language | Tipo de linguagem do corpo do pedido |
Content-Length | Comprimento do corpo do pedido |
Content-Type | Tipo de conteúdo do corpo do pedido (ex: text/HTML). Ver MIMO |
Date | Data de início de transferência dos dados |
Forwarded | Utilizado pelas máquinas intermediárias entre o browser e o servidor |
From | Permite especificar o e-mail do cliente |
From | Permite especificar se o documento deve ser enviado caso tenha sido alterado a partir de uma certa data |
Link | Relação entre dois URLs |
Orig-URL | URL de origem do pedido |
Referer | URL do link a partir da qual o pedido foi efetuado |
User-Agent | Cadeia dando informações sobre o cliente, como o nome e a versão do navegador, do sistema operacional |
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
Nome do cabeçalho |
Descrição |
---|---|
Content-Encoding |
Tipo de codificação do corpo da resposta |
Content-Language | Tipo de linguagem do corpo da resposta |
Content-Length | Comprimento do corpo da resposta |
Content-Type | Tipo de conteúdo do corpo da resposta (ex: text/HTML). Ver MIMO |
Date | Data de início de transferência dos dados |
Expires | Data limite de consumo dos dados |
Forwarded | Utilizado pelas máquinas intermediárias entre o browser e o servidor |
Location | Redirecionamento para um novo URL associado ao documento |
Server | Características do servidor que envia a 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, em que o primeiro indica a classe de status e os seguintes, a natureza exata do erro:
Código | Mensagem | Descrição |
---|---|---|
10x | Mensagem de informação | Estes códigos não são utilizados na versão 1.0 do protocolo |
20x | Sucesso | Estes códigos indicam o bom desenrolar da transação |
200 | OK | O pedido foi realizado corretamente |
201 | CREATED | 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 |
202 | ACCEPTED | O pedido foi aceito, mas o procedimento seguinte não foi realizado |
203 | PARTIAL INFORMATION | Quando este código é recebido em resposta a um comando GET, isto indica que a resposta não está completa |
204 | NO RESPONSE | O servidor recebeu o pedido mas não há informação a ser retornada |
205 | RESET CONTENT | O servidor indica ao navegador para excluir o conteúdo dos campos de um formulário |
206 | PARTIAL CONTENT | Trata-se de uma resposta a um pedido que comporta o cabeçalho range. O servidor deve indicar o cabeçalho content-range |
30x | Redirecionamento | Estes códigos indicam que o recurso não está mais no lugar indicado |
301 | MOVED | Os dados pedidos foram transferidos para um novo endereço |
302 | FOUND | Os dados pedidos são de um novo URL, mas talvez tenham sido deslocados desde então |
303 | METHOD | Isto implica que o cliente deve tentar um novo endereço, tentando um outro método além do GET |
304 | NOT MODIFIED | Se 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 |
40x | Erro devido ao cliente | Estes códigos indicam que o pedido está incorreto |
400 | BAD REQUEST | A sintaxe do pedido está mal formulada ou impossível de validar |
401 | UNAUTHORIZED | O 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 |
402 | PAYMENT REQUIRED | O cliente deve reformular o seu pedido com os dados de pagamento corretos |
403 | FORBIDDEN | O acesso ao recurso foi recusado |
404 | NOT FOUND | Muito comum! O servidor não encontrou nada no endereço indicado |
50x | Erro devido ao servidor | Estes códigos indicam que houve um erro interno no servidor |
500 | INTERNAL ERROR | O servidor encontrou uma condição inesperada que o impediu de satisfazer o pedido |
501 | NOT IMPLEMENTED | O servidor não suporta o serviço pedido |
502 | BAD GATEWAY | O servidor recebeu uma resposta inválida por parte do servidor que tentava acessar agindo como uma passarela ou um proxy |
503 | SERVICE UNAVAILABLE | O 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) |
504 | GATEWAY TIMEOUT | A 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) |
Foto: © iStock.