🌍 Fundamentos

Fundamentos da Web

Antes de sair construindo sites e sistemas, vale entender o que acontece por baixo dos panos. Aqui você vai descobrir como a web funciona de verdade — do clique no link até a página aparecer na tela. Sem medo, sem papo de PhD, só o essencial com exemplos do dia a dia. 🚀

🌍 Como funciona a Web

Você digita www.google.com no navegador e — zap — a página aparece em menos de um segundo. Parece mágica, mas por trás existe um processo bem organizado, com várias etapas acontecendo a toda velocidade. Bora desvendar cada uma!

🍕
Analogia do dia: Pedir Pizza

Pense que você é o navegador e a pizzaria é o servidor. Você pega o telefone (abre o browser), liga para o número certo (encontra o IP via DNS), faz o pedido (HTTP Request) e a pizzaria prepara e entrega (HTTP Response). A pizza chegou? Você come (o browser renderiza a página). Simples! 🍕

O fluxo completo — passo a passo visual

💻
Você digita a URL
www.exemplo.com
📖
DNS Lookup
domínio → IP
🔌
Conexão TCP
3-way handshake
📤
HTTP Request
GET / HTTP/1.1
🖥️
Servidor processa
busca arquivos/BD
📥
HTTP Response
200 OK + HTML
🎨
Browser renderiza
página na tela!
  1. Você digita a URL — o navegador recebe o endereço e começa a trabalhar. Já verifica se tem resultado em cache local antes de qualquer coisa.
  2. DNS Lookup — o browser pergunta ao DNS: "qual é o IP desse domínio?". O DNS devolve algo como 142.250.79.46.
  3. Conexão TCP — o browser abre uma conexão com o servidor usando o protocolo TCP (o famoso 3-way handshake: SYN → SYN-ACK → ACK). É como dar um aperto de mão antes de conversar.
  4. HTTP Request — o browser envia uma requisição pedindo a página (geralmente um GET /).
  5. Servidor processa — o servidor recebe o pedido, busca os arquivos (ou consulta o banco de dados) e monta a resposta.
  6. HTTP Response — o servidor devolve o HTML, junto com metadados (status code, tipo de conteúdo, etc.).
  7. Renderização — o browser lê o HTML, monta o DOM, aplica o CSS e executa o JavaScript. Pronto: página na tela!
HTTP

GET / HTTP/1.1
Host: www.exemplo.com
User-Agent: Mozilla/5.0 (Windows NT 10.0)
Accept: text/html,application/xhtml+xml
Accept-Language: pt-BR,pt;q=0.9
Connection: keep-alive


HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 1523
Cache-Control: max-age=3600

<!DOCTYPE html>
<html lang="pt-BR">...página aqui...</html>
⚠️
Erros comuns de quem tá começando
  • Confundir URL com IP — a URL é o nome legível; o IP é o endereço numérico real.
  • Achar que a página vem "pronta" do servidor — o browser ainda precisa montar tudo a partir do HTML.
  • Ignorar o cache — muitas vezes o browser nem precisa ir ao servidor; já tem a resposta guardada localmente.
💡 Dica: Abra o DevTools do Chrome (F12), vá na aba Network e recarregue a página. Você vai ver cada requisição acontecendo ao vivo, com tempo, tamanho e status code. É hipnotizante — e muito útil para debugar!

🤝 Cliente e Servidor

A web funciona num esquema de pergunta e resposta. Tem quem pergunta e tem quem responde. Essa dupla tem um nome clássico na computação: cliente e servidor.

💬
"O cliente pergunta, o servidor responde. Simples assim."

O cliente nunca acessa o banco de dados diretamente — ele pede ao servidor, que decide o que responder. É uma camada de segurança indispensável.

💻

Cliente (Frontend)

Quem inicia a conversa — faz as requisições e exibe o resultado.

  • Roda no dispositivo do usuário
  • Lida com HTML, CSS e JavaScript
  • O que o usuário vê e clica
  • Exemplos: Chrome, Firefox, app React/Vue
🖥️

Servidor (Backend)

Quem ouve e responde — processa os dados e devolve o que foi pedido.

  • Roda em máquinas remotas (datacenter/nuvem)
  • Pode usar Node.js, PHP, Python, Go, Java…
  • Acessa bancos de dados e serviços externos
  • Exemplos: API em Express, servidor Apache/Nginx

Frontend × Backend × Full Stack

PerfilO que fazTecnologias comuns
Frontend Dev Cria a interface visual com a qual o usuário interage HTML, CSS, JavaScript, React, Vue, Svelte
Backend Dev Lógica de negócio, banco de dados, autenticação, APIs Node.js, PHP, Python, Java, Go, Ruby
Full Stack Dev Trabalha nos dois lados — o dev do bem e do mal 😄 Tudo acima + noções de DevOps/infra
JavaScript
// CLIENTE (browser) — faz uma requisição ao servidor
const resposta = await fetch('https://api.exemplo.com/usuarios');
const dados    = await resposta.json();
console.log(dados); // exibe na tela do usuário

// SERVIDOR (Node.js/Express) — responde à requisição
app.get('/usuarios', (req, res) => {
  const usuarios = db.buscarTodos(); // consulta o banco de dados
  res.json(usuarios);              // devolve os dados como JSON
});
⚠️
Erros comuns
  • Colocar lógica sensível (senhas, chaves de API) no frontend — qualquer um pode inspecionar o código!
  • Confundir "frontend" com "só HTML" — apps React/Vue complexos são 100% frontend.
  • Esquecer que servidores também podem ser clientes (quando chamam outras APIs).

📡 HTTP e HTTPS

HTTP significa HyperText Transfer Protocol — é o idioma que cliente e servidor usam para conversar na web. Pensa nele como o roteiro da conversa: quem fala primeiro, o que pode perguntar, como deve ser a resposta.

✉️
HTTP sem S é como mandar carta sem envelope — qualquer um lê!

Sem criptografia, os dados trafegam "na clara" pela rede. Alguém com acesso ao seu Wi-Fi (em cafés, aeroportos…) consegue interceptar e ler suas senhas. O HTTPS adiciona a camada TLS/SSL que embaralha tudo — só quem tem a chave certa consegue ler. 🔐

Os Verbos HTTP (Métodos)

Cada requisição usa um verbo que indica a intenção da operação:

VerboUsoAnalogia
GET Buscar/ler dados Pedir o cardápio do restaurante
POST Criar novo recurso Fazer um pedido novo
PUT Atualizar recurso completo Trocar o pedido inteiro
PATCH Atualizar parte do recurso Mudar só a sobremesa do pedido
DELETE Remover recurso Cancelar o pedido

Códigos de Status HTTP

O servidor sempre responde com um código numérico que diz como foi a operação:

CódigoNomeSignificado
200OK Deu tudo certo! Aqui está o que você pediu.
201Created Recurso criado com sucesso (resposta típica de POST).
301Moved Permanently Essa URL mudou de endereço para sempre.
302Found (Redirect) Vá para outro endereço temporariamente.
400Bad Request Sua requisição está malformada. Erro do cliente.
401Unauthorized Você precisa se autenticar primeiro.
403Forbidden Autenticado, mas sem permissão. Acesso negado.
404Not Found Não encontrado. O clássico dos clássicos. 👻
500Internal Server Error O servidor bugou. Culpa dele, não sua.

HTTP vs HTTPS

🔓

HTTP

  • Dados trafegam em texto puro
  • Qualquer um na rede pode interceptar
  • Porta padrão: 80
  • Não use para dados sensíveis!
🔒

HTTPS

  • HTTP + camada TLS/SSL
  • Dados criptografados ponta a ponta
  • Porta padrão: 443
  • Obrigatório para qualquer site sério
HTTP — POST com JSON
# Criando um usuário via POST
POST /api/usuarios HTTP/1.1
Host: api.exemplo.com
Content-Type: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9...

{
  "nome": "Maria Silva",
  "email": "maria@exemplo.com"
}

# Resposta de sucesso
HTTP/1.1 201 Created
Content-Type: application/json

{
  "id": 42,
  "nome": "Maria Silva",
  "criadoEm": "2024-01-15T10:30:00Z"
}
💡 Dica: Sempre use HTTPS no seu projeto — mesmo em desenvolvimento local você pode usar certificados com a ferramenta mkcert. Browsers modernos já exibem aviso para sites HTTP. Não deixa essa mancada passar!

📖 DNS — A Agenda Telefônica da Internet

DNS significa Domain Name System. É o sistema que traduz nomes de domínio legíveis (como google.com) para endereços IP numéricos (como 142.250.79.46) que as máquinas entendem. Porque ninguém quer decorar 142.250.79.46 em vez de google.com, né? 😅

📱
Analogia: A Agenda do Celular

Você salvou "Mãe" no celular e já ligou pra ela centenas de vezes — mas provavelmente não sabe o número dela de cor. O DNS faz o mesmo: você digita youtube.com e ele descobre o número (IP) pra você. Sem DNS, você precisaria decorar o IP de cada site. 😱

Como a resolução DNS funciona

🖥️
Você digita
google.com
💾
Cache local
já sabe? usa!
📡
Resolver DNS
do seu ISP
🌐
Root Server
quem cuida do .com?
🏢
DNS Autoritativo
IP = 142.250.79.46
Resposta ao browser
aqui está o IP!

Tipos de Registros DNS

TipoPara que serveExemplo
A Aponta domínio para um endereço IPv4 exemplo.com → 192.168.1.1
AAAA Aponta domínio para um endereço IPv6 exemplo.com → 2001:db8::1
CNAME Apelido — aponta para outro domínio www → exemplo.com
MX Servidor de e-mail do domínio mail.exemplo.com
TXT Texto livre (verificações, SPF, DKIM) v=spf1 include:...
Terminal
# Consultando DNS pelo terminal
$ nslookup google.com
Server:   8.8.8.8
Address:  8.8.8.8#53

Non-authoritative answer:
Name:    google.com
Address: 142.250.79.46

# Usando o dig (mais detalhado)
$ dig google.com A

# Resposta inclui TTL (tempo em cache)
google.com.  300  IN  A  142.250.79.46
⚠️
Erros comuns ao mexer com DNS
  • Impaciência: mudanças podem demorar até 48h para propagar — é o TTL do registro.
  • CNAME na raiz: não se usa CNAME no domínio raiz (exemplo.com), só em subdomínios.
  • Ponto final faltando: em alguns painéis, CNAME precisa do ponto no fim: outro.com.
💡 Dica: DNS público gratuito e rápido: use 8.8.8.8 (Google) ou 1.1.1.1 (Cloudflare). O da Cloudflare é geralmente o mais rápido do mundo e tem foco em privacidade. Vale trocar no seu roteador!

🔌 APIs

API significa Application Programming Interface. É um conjunto de regras que define como dois sistemas se comunicam. Em outras palavras: é o contrato que diz "se você me pedir desta forma, eu te respondo desta forma".

🍽️
"API é o garçom entre você e a cozinha."

Você (o app/cliente) não vai direto na cozinha (banco de dados/sistema interno). Você fala com o garçom (API), que leva seu pedido, traz o resultado e garante que você não mexa onde não deve. Elegante, seguro e organizado! 🧑‍🍳

REST API — o jeito mais popular

REST (Representational State Transfer) é um estilo arquitetural para criar APIs web. Uma API REST usa os verbos HTTP e organiza os dados em recursos (URLs). Cada URL representa algo do mundo real — um usuário, um produto, um pedido.

HTTP / REST API
# Endpoints REST de uma API de produtos

GET    /api/produtos           # lista todos os produtos
GET    /api/produtos/42       # busca o produto id=42
POST   /api/produtos           # cria novo produto
PUT    /api/produtos/42       # substitui produto id=42 completamente
PATCH  /api/produtos/42       # atualiza só alguns campos
DELETE /api/produtos/42       # remove produto id=42

# Resposta do GET /api/produtos/42
HTTP/1.1 200 OK
{
  "id": 42,
  "nome": "Notebook Gamer",
  "preco": 4999.90,
  "categoria": "eletrônicos",
  "emEstoque": true
}

Consumindo uma API com JavaScript

JavaScript — fetch()
// Buscando dados de uma API pública de clima
async function buscarClima(cidade) {
  const url = `https://api.openweathermap.org/data/2.5/weather?q=${cidade}&appid=SUA_CHAVE`;

  try {
    const resposta = await fetch(url);

    if (!resposta.ok) {
      throw new Error(`Erro HTTP: ${resposta.status}`);
    }

    const dados = await resposta.json();
    console.log(`Temperatura: ${dados.main.temp}°C`);

  } catch (erro) {
    console.error('Algo deu errado:', erro);
  }
}

buscarClima('São Paulo');

APIs famosas que você vai usar

🌤️
OpenWeather
Clima e previsão do tempo
🗺️
Google Maps
Mapas, rotas, geolocalização
💳
Stripe
Pagamentos online
📧
SendGrid
Envio de e-mails
🏠
ViaCEP
Endereço por CEP 🇧🇷
🤖
OpenAI
GPT, DALL-E, Whisper
⚠️
Erros comuns com APIs
  • Expor chaves de API no frontend — qualquer um inspeciona o código e rouba sua chave!
  • Não tratar erros — APIs ficam fora do ar, têm rate limits e retornam dados inesperados.
  • Ignorar rate limits — Excedeu o limite? Leva um 429 (Too Many Requests) e fica bloqueado.

📄 JSON

JSON — JavaScript Object Notation — é o formato de dados mais usado na web hoje. É uma forma de representar dados como texto legível tanto para humanos quanto para máquinas. Se você for trabalhar com APIs (e vai!), vai usar JSON o dia todo, todo dia.

Objeto JSON completo com endereço aninhado

JSON
{
  "id": 1,
  "nome": "João da Silva",
  "email": "joao@exemplo.com",
  "idade": 28,
  "ativo": true,
  "telefone": null,
  "endereco": {
    "rua": "Av. Paulista",
    "numero": 1000,
    "bairro": "Bela Vista",
    "cidade": "São Paulo",
    "cep": "01310-100"
  },
  "hobbies": [
    "programação",
    "videogame",
    "café"
  ],
  "scores": [95, 87, 92]
}

Tipos de dados em JSON

TipoExemploObservação
string "Olá mundo" Sempre aspas duplas
number 42, 3.14 Sem aspas. Sem separador de milhar.
boolean true, false Minúsculo! Não True/False.
null null Representa ausência de valor
array [1, "dois", true] Pode misturar tipos
object {"chave": "valor"} Chaves sempre entre aspas duplas

JSON.parse e JSON.stringify no JavaScript

JavaScript
// JSON.parse — converte string JSON → objeto JavaScript
const jsonString = '{"nome":"Ana","idade":25}';
const objeto     = JSON.parse(jsonString);
console.log(objeto.nome);  // "Ana"
console.log(objeto.idade); // 25

// JSON.stringify — converte objeto JavaScript → string JSON
const usuario = { nome: "Carlos", logado: true };
const texto   = JSON.stringify(usuario);
console.log(texto); // '{"nome":"Carlos","logado":true}'

// Com indentação (útil para debug e logs):
console.log(JSON.stringify(usuario, null, 2));

// Acessando dados aninhados:
const cidade = objeto.endereco.cidade; // "São Paulo"
const hobby  = objeto.hobbies[0];       // "programação"

Erros comuns no JSON

JSON — O que NÃO fazer ❌
// ❌ Trailing comma — vírgula no último item
{
  "nome": "Ana",
  "idade": 25,   // ← essa vírgula quebra tudo!
}

// ❌ Aspas simples — não são válidas em JSON
{
  'nome': 'Ana'   // ← deve usar aspas DUPLAS
}

// ❌ Chaves sem aspas — JSON não é JavaScript!
{
  nome: "Ana"   // ← chaves precisam de aspas duplas
}

// ❌ Comentários — JSON puro não suporta
{
  "id": 1 // isso vai quebrar o parse
}

// ✅ CORRETO
{
  "nome": "Ana",
  "idade": 25
}
💡 Dica: Use jsonlint.com para validar se um JSON está correto. No VS Code, use Ctrl+Shift+P → "Format Document" para indentar JSON automaticamente. Salva muita dor de cabeça!

📋 Resumão — Fundamentos da Web

🌍

Como funciona a Web

URL → DNS → TCP → HTTP Request → Server → HTTP Response → Render

🤝

Cliente e Servidor

Cliente pergunta (browser/app), servidor responde (Node.js/PHP/Python).

📡

HTTP e HTTPS

Verbos (GET/POST/PUT/DELETE), status codes (200/404/500), HTTPS = HTTP + TLS.

📖

DNS

Traduz domínios em IPs. Registros: A, CNAME, MX, TXT. Propagação leva até 48h.

🧭

Navegadores

Parse HTML → DOM, CSS → CSSOM, Render Tree, Layout, Paint. DevTools é essencial!

🔌

APIs

Contrato entre sistemas. REST usa HTTP + URLs como recursos. JSON como formato.

📄

JSON

Aspas duplas, sem vírgula no final, sem comentários. JSON.parse / JSON.stringify.

Nesta página