Pular para o conteúdo
Rizzygo Ako
Voltar para o tópico Como a web funciona

Como a web funciona, do clique à página

O que acontece entre você apertar Enter e a página aparecer. Você vai ver cada etapa acontecer de verdade nas ferramentas do navegador e no terminal, com o curl.

Cerca de 1 hora e 15 minutosNavegador e terminalMaterial gratuito em português

1. As partes de uma URL

Uma URL é o endereço completo de algo na web. Veja cada parte desta:

https://loja.exemplo.com.br:443/produtos/camisa?cor=azul#avaliacoes
ParteNeste exemploPara que serve
ProtocolohttpsComo conversar com o servidor
Domínioloja.exemplo.com.brO nome do servidor, que o DNS traduz em IP
Porta443O serviço no servidor. Fica escondida quando é a padrão (443 no HTTPS, 80 no HTTP)
Caminho/produtos/camisaQual recurso você quer
Parâmetros?cor=azulInformações extras para o servidor, em pares nome=valor
Fragmento#avaliacoesUm ponto dentro da página. Fica no navegador e não vai para o servidor

2. O caminho completo, em seis passos

  1. DNS: o navegador descobre o IP do domínio. A lição Redes na prática mostra como.
  2. Conexão: o navegador abre uma conexão com o servidor naquele IP, na porta 443.
  3. TLS: navegador e servidor combinam uma criptografia, e o servidor prova quem é com um certificado digital.
  4. Pedido: o navegador manda um pedido HTTP, por exemplo "me dê /produtos/camisa".
  5. Resposta: o servidor devolve um código de status, cabeçalhos e o conteúdo, normalmente HTML.
  6. Montagem: o navegador lê o HTML, descobre que precisa de CSS, JavaScript, imagens e fontes, e faz um novo pedido para cada um. Só então a página aparece completa.

Uma página comum dispara dezenas de pedidos. Em sites grandes, passa de uma centena.

3. Pedido e resposta HTTP

HTTP é a língua que navegador e servidor falam. Por baixo, um pedido é um texto organizado assim:

Pedido (request):
GET /produtos/camisa?cor=azul HTTP/1.1
Host: loja.exemplo.com.br
User-Agent: Mozilla/5.0 ...
Accept: text/html
Accept-Language: pt-BR
Resposta (response):
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Cache-Control: max-age=300

<!doctype html>
<html> ... a página ... </html>

A primeira linha do pedido tem o método e o caminho. As linhas seguintes são cabeçalhos (headers), informações extras em pares nome: valor. Na resposta, depois dos cabeçalhos vem uma linha em branco e o corpo, que é o conteúdo.

Os métodos mais usados

MétodoPara quêExemplo
GETBuscar algo, sem mudar nadaAbrir uma página, listar produtos
POSTEnviar dados para criar algo ou executar uma açãoEnviar um formulário, fazer um pedido
PUT e PATCHAtualizar algo que já existeMudar o endereço de entrega
DELETEApagarRemover um item do carrinho

O HTTP não guarda memória entre um pedido e outro: cada pedido chega ao servidor como se fosse o primeiro. É por isso que existem os cookies, que você vê na parte 8.

Hoje, a maioria dos sites usa HTTP/2 ou HTTP/3, que mandam várias coisas ao mesmo tempo pela mesma conexão e em formato binário, mais rápido. A ideia de pedido, cabeçalhos, status e corpo continua a mesma.

4. Códigos de status

Toda resposta traz um número de três dígitos. O primeiro dígito já diz muito:

FaixaSignificadoOs que você mais vai ver
2xxDeu certo200 OK, 201 Created (algo foi criado), 204 No Content (deu certo, sem conteúdo para devolver)
3xxVá para outro lugar301 (mudou de endereço de vez), 302 (mudou temporariamente), 304 (não mudou, use o que está no cache)
4xxErro de quem pediu400 (pedido mal formado), 401 (falta se identificar), 403 (identificado, mas sem permissão), 404 (não encontrado), 429 (pedidos demais, espere)
5xxErro no servidor500 (erro interno), 502 e 504 (um servidor intermediário não recebeu resposta a tempo ou recebeu uma inválida), 503 (indisponível)

Saber a faixa já direciona a investigação: com 4xx, confira o que foi pedido; com 5xx, olhe os logs do servidor.

5. Ver tudo nas ferramentas do navegador

Todo navegador moderno tem ferramentas de desenvolvedor (DevTools). Abra com F12 ou Ctrl+Shift+I no Windows e no Linux, ou Cmd+Option+I no Mac. No Safari, ative antes as ferramentas para desenvolvedores nos ajustes avançados do navegador.

  1. Abra um site qualquer e as ferramentas de desenvolvedor.
  2. Vá na aba Network (Rede).
  3. Recarregue a página com F5. Cada linha que aparece é um pedido.
  4. Clique no primeiro pedido, o do HTML. Em Headers, veja o método, o status e os cabeçalhos do pedido e da resposta. Em Response ou Preview, veja o conteúdo.

Repare também nas colunas Status, Type (tipo do arquivo), Size e Time. A barra de baixo mostra quantos pedidos a página fez e quanto tempo levou.

Faça agoraNa aba Network, digite status-code:404 no filtro (no Chrome, no Edge e no Firefox). Depois, mude a URL do site para um caminho que não existe, como /pagina-que-nao-existe, e veja o 404 aparecer.

6. HTTP pelo terminal com curl

O curl faz pedidos HTTP pelo terminal. Ele já vem instalado no Linux, no Mac e no Windows 10 e 11. No PowerShell, digite curl.exe em vez de curl, porque curl sozinho chama outro comando.

curl -I https://www.wikipedia.org

O -I pede só o status e os cabeçalhos, sem o corpo. Para ver a conversa inteira, inclusive a conexão e o certificado:

curl -v https://www.wikipedia.org -o /dev/null

As linhas que começam com > são o que o curl mandou. As que começam com < são o que o servidor respondeu. O -o /dev/null descarta o corpo para não encher a tela (no Windows, use -o NUL).

Para ver um redirecionamento:

curl -I http://wikipedia.org
Saída parecida com esta:
HTTP/1.1 301 Moved Permanently
location: https://wikipedia.org/

O servidor respondeu 301 e mandou ir para a versão com HTTPS. O navegador segue o redirecionamento sozinho; o curl só segue com a opção -L.

7. HTTPS: o cadeado

HTTPS é o HTTP dentro de uma conexão criptografada com TLS. Ele garante três coisas:

Cadeado não quer dizer site honestoO cadeado só garante que a conexão é segura e que o site é dono daquele domínio. Um site de golpe também pode ter HTTPS. Confira sempre se o domínio é o certo.

8. Cookies e sessões

Como o HTTP não guarda memória, o servidor precisa de um jeito de reconhecer você de um pedido para o outro. Depois do login, ele responde com um cabeçalho Set-Cookie, e o navegador passa a mandar esse cookie em todo pedido seguinte para aquele site:

Set-Cookie: sessao=a8f3k2...; Secure; HttpOnly; SameSite=Lax

Quem tem o cookie de sessão age como você naquele site. Por isso, nunca compartilhe cookies nem prints que mostrem cabeçalhos de pedidos logados. Nas ferramentas de desenvolvedor, os cookies ficam na aba Application (Chrome e Edge) ou Storage (Firefox).

9. Cache e CDN: por que alguns sites são tão rápidos

Cache é guardar uma cópia para não buscar de novo. O servidor diz, no cabeçalho Cache-Control, por quanto tempo a cópia vale. Logos, fontes e arquivos CSS costumam ficar em cache por dias.

Uma CDN (rede de entrega de conteúdo), como Cloudflare, Fastly ou Google Cloud CDN, tem servidores espalhados pelo mundo que guardam cópias dos arquivos do site. Quem acessa de São Paulo recebe a cópia de um servidor próximo, sem precisar ir até o servidor original. Além de acelerar, a CDN aguenta picos de acesso e filtra ataques.

Ao rodar curl -I num site atrás de uma CDN, você costuma ver cabeçalhos extras, como cf-cache-status na Cloudflare ou age, que diz há quantos segundos a cópia está em cache.

10. APIs: quando a resposta não é uma página

Muitas vezes, o que volta do servidor não é HTML, e sim dados, quase sempre em JSON. É assim que aplicativos de celular e sites modernos conversam com o backend (a parte do sistema que roda no servidor): por uma API, um conjunto de endereços que recebem e devolvem dados.

curl https://api.github.com/users/octocat
Trecho da resposta:
{
  "login": "octocat",
  "name": "The Octocat",
  ...
}

JSON organiza os dados em pares "nome": valor entre chaves. A mesma lógica de métodos, status e cabeçalhos vale aqui: um GET busca dados, um POST cria, e o código de status diz se deu certo.

11. Missão final

1. Conte os pedidos de uma página

Abra a aba Network, recarregue um site que você usa e anote quantos pedidos ele fez, quanto pesou e quanto tempo levou. Depois compare com outro site.

2. Descubra se um site usa CDN
curl -sI https://www.cloudflare.com | grep -i -E "server|cache"

O -s esconde a barra de progresso. O grep -i -E filtra as linhas que têm "server" ou "cache", sem diferenciar maiúsculas. O PowerShell do Windows não tem grep: use curl.exe -sI https://www.cloudflare.com | findstr /i "server cache".

3. Siga um redirecionamento até o fim
curl -sIL http://github.com | grep -i -E "^HTTP|^location"

Cada par de linhas mostra um salto: o status e para onde o servidor mandou ir. No PowerShell, use curl.exe -sIL http://github.com | findstr /i /r "^HTTP ^location".

Para fixarExplique para alguém a diferença entre um erro 404 e um erro 500, e quem precisa agir em cada caso. Depois, marque no tópico que você ensinou alguém.

Lição escrita em português pela Iniciativa Ako, da Rizzygo, com base na documentação do MDN sobre HTTP. O texto e os exemplos são próprios. Os cabeçalhos e números das saídas mudam conforme o site e o dia.

Conteúdo aberto sob a licença CC BY 4.0. Viu um erro? Abra uma issue.