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).
A comunicação entre o navegador e o servidor faz-se em dois tempos :

Um pedido HTTP é um conjunto de linhas enviado ao servidor pelo navegador. Compreende:
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)
| Comando | Descrição |
|---|---|
| GET | Pedido do recurso situado na URL especificada |
| HEAD | Pedido do cabeçalho do recurso situado na URL especificada |
| POST | Envio de dados ao programa situado na URL especificada |
| PUT | Envio de dados à URL especificada |
| DELETE | Supressão do recurso situado na URL especificada |
| Nome da rubrica | Descrição |
|---|---|
| Accept | Tipo de conteúdo aceite pelo motor de pesquisa (por exemplo text/HTML). Ver tipos MIMO |
| Accept-Charset | Jogo de caracteres esperado pelo motor de pesquisa |
| Accept-Encoding | Codificação de dados aceite pelo motor de pesquisa |
| Accept-Language | Linguagem esperada pelo motor de pesquisa (inglês, por defeito) |
| Authorization | Identificação do motor de pesquisa junto do 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 (por exemplo text/HTML). Ver tipos MIMO |
| Date | Data de início de transferência dos dados |
| Forwarded | Utilizado pelas máquinas intermédias entre o motor de pesquisa e o servidor |
| From | Permite especificar o e-mail do cliente |
| From | Permite especificar que o documento deve ser enviado se tiver sido alterado a partir de uma certa data |
| Link | Relação entre duas URL |
| Orig-URL | URL de origem do pedido |
| Referer | URL da ligação a partir da qual o pedido foi efectuado |
| User-Agent | Cadeia dando informações sobre o cliente, como o nome e a versão do navegador, do sistema de exploração |
Uma resposta HTTP é um conjunto de linhas enviadas ao navegador pelo servidor. Compreende:
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
| Nome da rubrica | 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 (por exemplo text/HTML). Ver tipos MIMO |
| Date | Data de início de transferência dos dados |
| Expires | Data limite de consumo dos dados |
| Forwarded | Utilizado pelas máquinas intermédias entre o motor de pesquisa e o servidor |
| Location | Redireccionamento para uma nova URL associada ao documento |
| Server | Características do servidor que envia a 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ódigo | Mensagem | Descrição |
|---|---|---|
| 10x</gras> | Mensagem de informação | Estes códigos não são utilizados na versão 1.0 do protocolo |
| 20x</gras> | Sucesso | Estes códigos indicam o bom desenrolar da transacção |
| 200 | OK | O pedido foi realizado correctamente |
| 201 | CREATED |
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. |
| 202 | ACCEPTED | O pedido foi aceite, 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 devolver |
| 205 | RESET CONTENT | O servidor indica ao navegador para suprimir o conteúdo dos campos de um formulário |
| 206 | PARTIAL CONTENT | Trata-se de uma resposta a um pedido que comporta a rubrica range. O servidor deve indicar a rubrica content-range |
| 30x | Redirecção | Estes códigos indicam que o recurso já não está no lugar indicado |
| 301 | MOVED | Os dados pedidos foram transferidos para um novo endereço |
| 302 | FOUND | Os dados pedidos são de uma nova URL, contudo talvez tenham sido deslocados desde então... |
| 303 | METHOD | Isto implica que o cliente deve tentar um novo endereço, tentando preferivelmente um outro método além do GET |
| 304 | NOT MODIFIED | Se 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. |
| 40x | Erro devido ao cliente | Estes códigos indicam que o pedido está incorrecto |
| 400 | BAD REQUEST | A sintaxe do pedido está mal formulada ou é impossível de satisfazer |
| 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 bons dados de autorização |
| 402 | PAYMENT REQUIRED | O cliente deve reformular o seu pedido com os bons dados de pagamento |
| 403 | FORBIDDEN | O acesso ao recurso é simplesmente proibido |
| 404 | NOT FOUND | Clássico! 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 do servidor |
| 500 | INTERNAL ERROR | O servidor encontrou uma condição inesperada que o impediu de satisfazer o pedido (às vezes acontecem coisas aos servidores…) |
| 501 | NOT IMPLEMENTED | O servidor não suporta o serviço pedido (não podemos saber fazer tudo, não é?…) |
| 502 | BAD GATEWAY | O servidor recebeu uma resposta inválida por parte do servidor que tentava aceder agindo como uma ponte estreita ou um proxy |
| 503 | SERVICE UNAVAILABLE | O 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) |
| 504 | GATEWAY TIMEOUT | A 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…) |
Para mais informações sobre o protocolo HTTP, é melhor consultar oRFC 1945 que explica de maneira detalhada o protocolo :