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.
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.
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.
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.
Cookies são usados para manter estado/identidade em HTTP sem exigir que o servidor mantenha estado entre requisições. Componentes:
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.
Um cache Web (proxy) atende requisições HTTP em nome do servidor de origem. O cache tem seu próprio armazenamento e pode:
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.
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:
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.
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.
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.
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.
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.