Protocolo de Transferência de Hipertexto (HTTP) ou Hypertext Transfer Protocol é o protocolo usado em cada transação da world wide web, ou www.
Usando HTTP, os clientes e servidores determinam dinamicamente o formato dos documentos, permitindo que eles usem um formato não padrão para troca de dados.
Veja também – Ethereum
Se o receptor não tiver uma maneira de ver ou acessar os dados, é possível fazer o download de um programa de plug-in que permita receber o conteúdo.
Os cabeçalhos HTTP contêm informações sobre os objetos transmitidos pelo aplicativo através da web. Com as informações de cabeçalhos, os aplicativos cliente-servidor negociam os formatos que poderão usar para transferir os objetos.
Se eles não reconhecerem as informações no cabeçalho, apenas o ignoram. Portanto, o recomendável é testar novos protocolos sem comprometer a integridade do HTTP. Além disso, o protocolo é baseado em texto, portanto, é legível e não requer decodificação.
História do HTTP
O HTTP foi desenvolvido pelo World Wide Web Consortium e pela Internet Engineering Task Force. Esta foi uma colaboração que culminou em 1999 com a publicação de uma série de RFCs. Destes, o mais importante foi o RFC 2616 que especifica a versão 1.1.
O HTTP define a sintaxe e a semântica que os elementos de software da arquitetura da web (clientes, servidores, proxies) usam para se comunicar.
É um protocolo orientado por transações e segue o esquema de solicitação-resposta entre um cliente e um servidor. O cliente que faz a solicitação (um navegador da web) é conhecido como “agente do usuário”.
A informação transmitida é chamada de recurso e é identificada por um localizador uniforme de recursos (URL). Os recursos podem ser:
- Arquivos;
- O resultado da execução de um programa;
- Uma consulta a um banco de dados;
- A tradução automática de um documento;
- Etc.
HTTP é um protocolo sem estado, isto é, não armazena nenhuma informação sobre conexões anteriores. O desenvolvimento de aplicativos da web geralmente precisa manter o estado.
Para tal, são usados cookies, ou seja, informações que um servidor pode armazenar no sistema do cliente. Isso permite que os aplicativos da web instituam a noção de “sessão”. Também permite que os usuários sejam rastreados, uma vez que os cookies são “guardados” no cliente por um período indefinido de tempo.
Transações HTTP
Uma transação P é formada por um cabeçalho seguido, opcionalmente, por uma linha em branco e alguns dados. O cabeçalho especificará coisas como:
- A ação necessária do servidor;
- O tipo de dados retornados;
- O código de status.
O uso de campos de cabeçalho enviados em trens TP dá grande flexibilidade ao protocolo. Esses campos facilitam o envio das informações descritivas na transação, permitindo:
- A autenticação;
- A criptografia;
- A identificação do usuário.
Um cabeçalho é um bloco de dados que precede as informações em si. Por isso é frequentemente chamado de metadados, porque possui dados sobre os dados.
Se as linhas de cabeçalho do cliente forem recebidas, o servidor as colocará nas variáveis de ambiente CGI com o prefixo HTTP_ seguido do nome do cabeçalho. Qualquer caractere de hífen (-) no nome do cabeçalho é convertido em caracteres “_”.
O servidor pode excluir quaisquer cabeçalhos já processados, como Autorização, Tipo de Conteúdo e Comprimento do Conteúdo. O servidor também pode optar por excluir alguns ou todos os cabeçalhos, caso a inclusão exceda quaisquer limites do ambiente do sistema.
O servidor envia para o cliente um código de status que indica se a solicitação estava correta ou não. Códigos de erro típicos informam:
- Que o arquivo solicitado não foi encontrado;
- Que a solicitação não foi executada corretamente;
- Que a autenticação é necessária para acessar o arquivo.
O servidor também envia a informação em si e as informações sobre o objeto retornado. Como o HTTP permite enviar documentos de todos os tipos e formatos, é ideal para transmissão de multimídia, como gráficos, áudio e vídeo. Essa liberdade é uma das maiores vantagens do protocolo.
Versões
O HTTP passou por várias versões do protocolo, muitas das quais são compatíveis com as anteriores. RFC-2145 descreve o uso de números de versão HTTP. O cliente informa ao servidor no início da solicitação a versão que ele usa e o servidor usa o mesmo ou um anterior em sua resposta.
Entre essas versões estão:
- 0,9 – Obsoleto. Suporta apenas um comando, GET, e também não especifica o número da versão HTTP. Não suporta cabeçalhos e não suporta POST, então o cliente não pode enviar muita informação para o servidor;
- HTTP/1.0 (maio de 1996) – Esta é a primeira revisão do protocolo que especifica sua versão nas comunicações e ainda é amplamente usada, especialmente em servidores proxy;
- HTTP/1.1 (junho de 1999) – É a versão atual. As conexões persistentes são habilitadas por padrão e funcionam bem com proxies. Também permite que o cliente envie várias solicitações ao mesmo tempo, o que possibilita eliminar o tempo de atraso da viagem de ida e volta para cada solicitação;
- HTTP/1.2 – Os primeiros rascunhos de 1995 do Protocolo de Extensão, que é um mecanismo de extensor para HTTP foram feitos pelo World Wide Web Consortium e enviados para a Força-Tarefa de Engenharia da Internet.
Nota: O Protocolo de Extensão foi inicialmente destinado a se tornar um intervalo distinto de HTTP/1.2. Nos rascunhos subsequentes, no entanto, a referência ao HTTP/1.2 foi excluída. O HTTP Extension Framework inclui, em grande parte, o Protocolo de Extensão publicado em fevereiro de 2000.
Exemplo de um diálogo HTTP
Para obter um recurso com o URL http://www.exemplo.com/index.html é preciso que uma conexão com o host seja aberta www.exemplo.com, porta 80, que é a porta padrão para HTTP.
Uma mensagem é enviada no seguinte estilo:
GET /index.html
Host HTTP/1.1 : www.exemplo.com
User-Agent: nome do cliente
[linha em branco]
A resposta do servidor consiste em cabeçalhos seguidos pelo recurso solicitado, no caso de uma página da web:
HTTP/1.1 200 OK
Data: Sex, 31 Dec 2008 23:59:59 GMT
Tipo de conteúdo: text / html
Content-Length: 1221
<html>
<body>
<h1> Página inicial do yourHost </ h1>
(Conteúdo)
…
………. ‘
</ body>
</ html>
A linguagem do HTTP pode parecer um tanto complicada, mas na prática é tudo o que se faz na Internet e nem sequer temos noção.