Princípios Básicos do HTTP
HTTP opera sobre uma camada de transporte confiável, tipicamente TCP/IP. Um cliente, como um navegador web, estabelece uma conexão com um servidor e envia uma requisição. O servidor processa a requisição e retorna uma resposta. Após a troca, a conexão pode ser encerrada ou mantida para requisições subsequentes.
Por ser um protocolo sem estado (stateless), cada requisição é independente. Para manter o estado da sessão, mecanismos como cookies ou sessões baseadas em servidor são utilizados.
Fluxo de Trabalho Típico
Uma interação padrão segue estas etapas:
- O cliente inicia uma conexão TCP com o servidor.
- Uma mensagem de requisição HTTP é enviada, contendo um método (GET, POST, etc.), URI e cabeçalhos.
- O servidor responde com um código de status (ex.: 200 OK), cabeçalhos e, opcionalmente, um corpo de mensagem.
- O cliente processa a resposta e, se necessário, a conexão é encerrada.
Em HTTP/1.1, o cabeçalho Connection: keep-alive permite reutilizar a mesma conexão TCP para múltiplas requisições, melhorando a eficiência.
Estrutura das Mensagens HTTP
Requisições
Uma requisição é composta por:
- Linha de requisição: Método, URI e versão do protocolo.
- Cabeçalhos: Metadados como
Host,User-AgenteAccept. - Corpo (opcional): Dados como formulários ou uploads.
Exemplo de uma requisição modificada:
GET /recursos/dados.json HTTP/1.1
Host: api.exemplo.com
Accept: application/json
Respostas
Uma resposta inclui:
- Linha de status: Versão, código de status e frase de razão.
- Cabeçalhos: Informações como
Content-TypeeCache-Control. - Corpo (opcional): O conteúdo solicitado, como HTML ou JSON.
Exemplo de resposta alterada:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Cache-Control: max-age=3600
{"status": "ativo", "id": 5678}
Cabeçalhos HTTP Comuns
Os cabeçalhos transmitem informações adicionais. Exemplos reescritos:
If-Modified-Since: Usado com caching. O cliente envia a data da última modificação conhecida. Se o recurso não mudou, o servidor retorna 304 Not Modified.Content-Negotiation: Cabeçalhos comoAccept,Accept-LanguageeAccept-Encodingpermitem que o cliente especifique perferências de formato.Authorization: Para autenticação, com esquemas como Basic ou Digest.
Códigos de Status
Os códigos indicam o resultado da requisição:
- 2xx (Sucesso): 200 OK, 201 Created, 204 No Content.
- 3xx (Redirecionamento): 301 Moved Permanently, 302 Found, 304 Not Modified.
- 4xx (Erro do Cliente): 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found.
- 5xx (Erro do Servidor): 500 Internla Server Error, 503 Service Unavailable.
Gerenciamento de Estado
Para superar a natureza sem estado, o HTTP oferece soluções:
- Cookies: Pequenos trechos de dados armazenados pelo cliente e enviados em requisições subsequentes.
- Sessões: O servidor mantém um estado associado a um identificador único (session ID), frequentemente gerenciado via cookies ou parâmetros de URL.
Uma comparação modificada: Cookies são armazenados no lado do cliente e enviados automaticamente, enquanto sessões residem no servidor e requerem um mecanismo de correlação.
Segurança com HTTPS
HTTPS é HTTP sobre TLS/SSL, fornecendo criptografia ponta a ponta. O processo envolve:
- Um handshake TLS onde cliente e servidor negociam algoritmos de criptografia.
- Troca de chaves públicas e verificação de certificados.
- Comunicação simétrica com chaves de sessão seguras.
Isso garante confidencialidade, integridade e autenticação.
Mecanismos de Cache
O caching melhora o desempenho ao armazenar respostas. Mecanismos chave:
Cache-Control: Diretivas comomax-age,no-cache,publicouprivate.ETageLast-Modified: Para validação de recursos. O cliente enviaIf-None-MatchouIf-Modified-Sincepara verificar atualizações.
Aplicações Avançadas
Download Parcial e Retomada
Usando o cabeçalho Range, clientes podem solicitar partes específicas de um recurso. Respostas com código 206 Partial Content permitem retomar downloads interompidos.
Proxy e Hospedagem Virtual
Proxies atuam como intermediários, podendo cache, filtrar ou anonimizar requisições. O cabeçalho Host permite hospedagem virtual, onde múltiplos domínios são servidos pelo mesmo IP.
Exemplo de Depuração com Telnet
Para testar manualmente, conecte-se a um servidor na porta 80 e envie requisições. Modificando a versão do protocolo:
GET / HTTP/1.1
Host: www.exemplo.com
Connection: close
Observe como o servidor responde e fecha a conexão, demonstrando a diferença entre HTTP/1.0 e 1.1.