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:
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
| 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 |
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-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 |
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-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 |
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ó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. Partiram sem deixar endereço |
| 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) |
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.
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.