Junior
Fale sobre as versões do HTTP e as suas diferenças.
sobes.tech IA
Resposta da IA
Versões principais do HTTP:
- HTTP/0.9: Versão básica para transmissão de documentos HTML simples. Suportava apenas o método
GET, sem cabeçalhos nem estados de resposta. - HTTP/1.0: Introduzido suporte para cabeçalhos (Content-Type, User-Agent), métodos
POSTeHEAD, e estados de resposta. A conexão era fechada após cada pedido/resposta. - HTTP/1.1: Melhorias significativas:
- Conexões persistentes (Persistent Connections) - reutilização da conexão TCP para várias solicitações.
- Pipelining - envio de múltiplas solicitações sem esperar pela resposta anterior (mal implementado e pouco utilizado).
- Hosts virtuais (cabeçalho Host).
- Solicitações GET parciais (cabeçalho Range).
- Cache (Cache-Control, ETag, Last-Modified).
- Métodos PUT e DELETE.
- HTTP/2: Protocolo baseado no SPDY do Google. Diferenças principais:
- Protocolo binário em vez de texto - análise mais eficiente.
- Multiplexação - transmissão paralela de várias solicitações/respostas numa única conexão TCP. Elimina o problema de "head-of-line blocking" no pipelining HTTP/1.1.
- Compressão de cabeçalhos (HPACK) - redução do tamanho dos dados transmitidos.
- Priorização (Server Push) - o servidor pode enviar recursos que provavelmente o cliente precisará antes de os solicitar.
- HTTP/3: Baseado no UDP (com QUIC - Quick UDP Internet Connections) em vez de TCP. Focado em melhorar o desempenho, especialmente em redes instáveis:
- Eliminação do "head-of-line blocking" ao nível da conexão TCP. Se um pacote for perdido no TCP, todos os pacotes seguintes ficam bloqueados até à sua retransmissão. No QUIC (e HTTP/3), apenas o fluxo ao qual o pacote perdido pertence fica bloqueado.
- Estabelecimento de conexão mais rápido (0-RTT ou 1-RTT).
- O QUIC inclui os seus próprios mecanismos de controlo de fluxo e fiabilidade.
Diferenças principais na tabela:
| Funcionalidade | HTTP/1.0 | HTTP/1.1 | HTTP/2 | HTTP/3 |
|---|---|---|---|---|
| Protocolo | TCP | TCP | TCP | UDP (QUIC) |
| Formato | Texto | Texto | Binário | Binário |
| Conexão por defeito | Temporária | Permanente | Permanente (multiplexagem) | Permanente (Streams QUIC) |
| Multiplexagem | Não | Imitação (Pipelining) | Sim | Sim |
| Compressão de cabeçalhos | Não | Não | HPACK | QPACK (no QUIC) |
| Server Push | Não | Não | Sim | Sim |
| Bloqueio HOL (TCP) | Sim (ao nível da solicitação) | Sim (ao nível da solicitação) | Sim (ao nível da conexão) | Não (ao nível do fluxo) |
Exemplo de pedido em HTTP/1.1:
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: curl/7.64.1
Accept: */*
Exemplo de pedido em HTTP/2 (conceitualmente, pois é binário):
// Pedido 1: Obter /index.html
// :method = GET
// :path = /index.html
// :authority = www.example.com
// Pedido 2: Obter /style.css
// :method = GET
// :path = /style.css
// :authority = www.example.com
// ...transmitidos em paralelo numa única conexão