Protocolo HTTP e Web

1) Explicação detalhada dos tópicos

2.2 Descrição geral da Web e HTTP

A Web é a aplicação que tornou a Internet amplamente conhecida pelo público. Ela funciona sob demanda: você clica, solicita e recebe conteúdo quando quer. Em essência, a Web é baseada na arquitetura cliente-servidor e usa o protocolo HTTP na camada de aplicação para a comunicação entre o cliente (navegador) e o servidor (aplicação Web). Um “objeto” pode ser HTML, imagens, vídeos, scripts etc., tudo acessível por um URL único. O HTTP é executado sobre o TCP, que oferece uma transferência confiável de dados entre cliente e servidor. Importante: o HTTP é sem estado; o servidor não mantém memória de sessões entre requisições, o que simplifica o design e escala bem.

2.2.1 Descrição geral do HTTP

O HTTP é um protocolo da camada de aplicação com dois papéis básicos: cliente e servidor. O cliente envia requisições para obter objetos, enquanto o servidor responde com os objetos solicitados. URLs identificam objetos, compostos por hostname (nome do hospedeiro) e o caminho do objeto. HTTP funciona com mensagens: requisição (client → server) e resposta (server → client). Normalmente, uma página é HTML com referências a outros objetos (imagens, JS, CSS etc.). O HTTP usa TCP como transporte; o HTTP não lida com perdas de dados (isso fica com o TCP). Existe também o conceito de cache (servidores proxy) e de cookies para manter sessões sem estado.

Exemplo de URL: http://www.exemplos.edu/pasta/img.png. O hostname aponta para o servidor que abriga o objeto; o caminho especifica onde o objeto está armazenado no servidor.

2.2.2 Conexões persistentes e não persistentes

Conexões não persistentes: para cada objeto (HTML, imagem etc.) é aberta uma nova conexão TCP, transferido o objeto e, em seguida, a conexão é fechada. Em páginas com muitos objetos, isso implica várias voltas de handshake TCP (RTT) e várias conexões, aumentando latência e custo no servidor.

Conexões persistentes: após enviar uma resposta, a conexão TCP permanece aberta para futuras requisições do mesmo cliente-servidor. Assim, páginas completas podem ser carregadas por uma única conexão, reduzindo overhead de handshake e aumentando paralelismo (pipelining). Navegadores modernos também usam paralelismo em várias conexões para contornar limitações de bloqueio de cabeça de linha (HOL) em HTTP/1.1.

Observação: HTTP/1.0 usava muito conexões não persistentes; HTTP/1.1 introduziu de forma padrão conexões persistentes com allow de pipeline e keep-alive; HTTP/2 reduz o número de conexões paralelas mantendo a multiplexação para evitar HOL.

2.2.3 Formato da mensagem HTTP

Existem dois tipos de mensagens: requisição e resposta. Requisição típica (texto ASCII, linhas separadas por CRLF):

GET /caminho/arquivo.html HTTP/1.1
Host: www.exemplos.edu
Connection: close
User-Agent: Mozilla/5.0
Accept-Language: fr

A linha de requisição tem o método (GET, POST, HEAD, PUT, DELETE), o URL e a versão do HTTP. Linhas de cabeçalho contêm informações como Host (útil para caches proxy) e outras informações de cliente. O corpo de entidade existe apenas para métodos como POST.

Resposta típica (HTTP/1.1 200 OK):

HTTP/1.1 200 OK
Connection: close
Date: Sat, 18 Ago 2015 12:34:56 GMT
Server: Apache/2.2.3
Last-Modified: Sat, 18 Aug 2015 12:00:00 GMT
Content-Length: 6821
Content-Type: text/html

<dados do objeto HTML>

A linha de status contém o código (200) e a frase associada. Existem também códigos como 301, 404, 304 etc. Códigos ajudam a indicar resultados de forma padronizada.

2.2.4 Interação usuário-servidor: cookies

Cookies são usados para manter estado/identidade em HTTP sem exigir que o servidor mantenha estado entre requisições. Componentes:

  • Um cabeçalho Set-Cookie na resposta do servidor.
  • Um cabeçalho Cookie na requisição do cliente.
  • Arquivo de cookies no navegador do usuário.
  • Banco de dados no site para correlacionar o cookie com informações de usuário.

Exemplo: Susan visita Amazon pela primeira vez; o servidor gera um ID e envia Set-Cookie: id=1678. Nas visitas subsequentes, o navegador envia Cookie: id=1678 para manter sessão e personalizar a experiência.

Observação: cookies podem levantar questões de privacidade, pois permitem rastrear comportamento do usuário entre visitas e sites diferentes se combinados com dados de conta.

2.2.5 Caches Web

Um cache Web (proxy) atende requisições HTTP em nome do servidor de origem. O cache tem seu próprio armazenamento e pode:

  • Responder a partir de cópias locais se tiver o objeto.
  • Se não possuir, buscar o objeto no servidor de origem, armazenar uma cópia e retornar ao cliente.
  • Funcionar como servidor (para clientes) e como cliente (para o servidor de origem).

Benefícios: reduzir latência para o usuário final e reduzir tráfego na rede, especialmente em enlaces de acesso. Exemplo: na LAN há cache; apenas parte das requisições vão aos servidores de origem, diminuindo o tráfego através do enlace de Internet.

GET condicional: para evitar trazer conteúdo desatualizado, o cache utiliza If-Modified-Since com o valor Last-Modified do objeto. Se o objeto não foi modificado, o servidor responde 304 Not Modified, permitindo que o cache use a cópia local sem transferir o objeto novamente.

2.2.6 HTTP/2

HTTP/2, padronizado em 2015, mantém os métodos, códigos de status, URLs e cabeçalhos do HTTP, mas altera a forma de transportar os dados. Principais objetivos:

  • Multiplexação de mensagens em uma única conexão TCP (evitando HOL de várias conexões paralelas).
  • Priorização de respostas, para que o cliente possa indicar a importância de cada objeto.
  • Servidor pode enviar push de recursos não solicitados (server push) com base no conteúdo referenciado pela página.
  • Compressão de cabeçalhos para reduzir overhead.

Observação: HTTP/2 não substitui TCP nem altera a semântica dos métodos; ele reestrutura a forma de envio usando quadros (frames) e multiplexação. O HTTP/3 utiliza QUIC (sobre UDP) para ainda mais melhorias, incluindo redução de latência e multiplexação com menor overhead.

2) Resumo dos tópicos e sub-tópicos

  1. 2.2 A Web e HTTP
    1. 2.2.1 Descrição geral do HTTP
      1. Conceito: HTTP como protocolo da camada de aplicação
      2. Arquitetura: cliente-servidor, mensagens HTTP, URL como identificador de objetos
    2. 2.2.2 Conexões persistentes e não persistentes
      1. Conexões não persistentes: cada objeto requer nova conexão TCP
      2. Conexões persistentes: várias requisições/objetos podem usar a mesma conexão
      3. Parallelismo e pipeline para melhorar desempenho em HTTP/1.1
    3. 2.2.3 Formato da mensagem HTTP
      1. Requisição: linha de requisição, cabeçalhos, corpo opcional
      2. Resposta: linha de estado, cabeçalhos, corpo (objeto)
      3. Exemplos de métodos: GET, POST, HEAD, PUT, DELETE
    4. 2.2.4 Interação usuário-servidor: cookies
      1. Quatro componentes: Set-Cookie, Cookie, arquivo de cookies, banco de dados de apoio
      2. Uso para sessões, personalização e comércio eletrônico
      3. Privacidade e controvérsias
    5. 2.2.5 Caches Web
      1. Função de caches para reduzir latência e tráfego
      2. Exemplo de rede institucional com cache local
      3. GET condicional para manter conteúdo atualizado (304 Not Modified)
    6. 2.2.6 HTTP/2
      1. Objetivos: reduzir latência com multiplexação, priorização, push e compressão
      2. Enquadramento de mensagens em quadros (frames)
      3. Push do servidor e priorização de respostas
      4. Transição para HTTP/3/QUIC para ainda mais melhorias

3) Mapa mental (mermaid)

mindmap root((Web e HTTP)) Descrição Geral HTTP: protocolo da camada de aplicação Cliente-Servidor Conexões Não persistentes Persistentes Parallelo/pipelining Mensagens Requisição Resposta Cookies 4 componentes Caches Web Benefícios GET condicional HTTP/2 Multiplexação Priorização Push Compressão de cabeçalhos HTTP/3/QUIC

Questões sobre o assunto

Questão 1 (Nível Médio)
1.50 pontos MÉDIA

Qual das seguintes afirmações sobre o protocolo HTTP está correta?

Resposta correta: C) HTTP utiliza TCP como transporte subjacente e é sem estado.

Explicação: HTTP opera em cima do TCP, com comunicação entre cliente e servidor, e não mantém estado entre requisições. Cada requisição/resposta pode ser tratada de forma independente.

Questão 2 (Nível Difícil)
2.50 pontos DIFÍCIL

Sobre as versões do protocolo HTTP, qual alternativa apresenta uma característica verdadeira do HTTP/1.1?

Resposta correta: B) Em HTTP/1.1, conexões persistentes reduzem o RTT por objeto em relação às não persistentes.

Explicação: Conexões persistentes mantêm a conexão TCP aberta para várias requisições, evitando o handshake para cada objeto e, com isso, reduzindo o tempo total de carregamento comparado às conexões não persistentes.

Questão 3 (Nível Difícil)
2.50 pontos DIFÍCIL

Qual é um dos principais objetivos do protocolo HTTP/2 em comparação ao HTTP/1.1?

Resposta correta: B) O objetivo do HTTP/2 é permitir multiplexação de mensagens em uma única conexão e reduzir Head-of-Line blocking.

Explicação: HTTP/2 fragmenta as mensagens em quadros, intercala requisições e respostas na mesma conexão, reduzindo bloqueios e melhorando a utilização da largura de banda. Também introduz compressão de cabeçalhos e suporte a push do servidor.

Questão 4 (Nível Extremo)
3.50 pontos EXTREMA

Considerando mecanismos de cache na Web, assinale a alternativa correta sobre o uso de requisições condicionais no protocolo HTTP:

Resposta correta: A) Em cache com GET condicional, If-Modified-Since evita o envio do objeto quando não houve modificação; o servidor retorna 304 Not Modified para indicar que o conteúdo pode ser utilizado do cache.

Explicação: O servidor informa que o conteúdo não mudou; assim, o cache pode reenviar a cópia existente, economizando banda e tempo de transferência. Em caso de modificação, o servidor enviará o objeto atualizado com código 200.

Pontuação Total
0.00