Aprenda Programação Front-End

Leia sobre Programação Front-End

Aprenda a criar sites com os curso gratuitos de programação front-end que selecionamos para você. Com HTML, CSS, JavaScript, PHP e muito mais.

Veja os Cursos Online (49)
Imagem do artigo Mobile-First no Front-End: Como Planejar e Construir Interfaces que Funcionam em Qualquer Tela
Imagem do artigo HTTP, Fetch e CORS no Front-End: Como Consumir APIs com Segurança e Sem Dor de Cabeça

HTTP, Fetch e CORS no Front-End: Como Consumir APIs com Segurança e Sem Dor de Cabeça

HTTP, Fetch e CORS no Front-End: Como Consumir APIs com Segurança e Sem Dor de Cabeça
Consumir APIs é uma das habilidades mais valiosas em Programação Front-End: praticamente toda interface moderna precisa buscar dados, enviar formulários, autenticar usuários e atualizar partes da tela sem recarregar a página. Para fazer isso com confiança, é essencial entender três pilares: como funciona o HTTP, como usar fetch (ou alternativas) e como lidar com CORS — o famoso bloqueio “funciona no Postman, mas não no navegador”.
Neste artigo, você vai aprender o necessário para consumir APIs no front-end de forma correta, previsível e segura, com exemplos práticos e um checklist para depurar erros comuns.
Para aprofundar com trilhas completas, vale visitar a subcategoria de cursos de
https://cursa.app/curso-desenvolvimento-web-online-e-gratuito e a categoria maior de https://cursa.app/cursos-online-informatica-ti-gratuito.
1) O básico do HTTP que todo front-end precisa dominar
HTTP é o protocolo que define como cliente (o navegador) e servidor trocam mensagens. Quando você “consome uma API”, você está fazendo requisições HTTP e recebendo respostas HTTP.
Métodos mais usados
GET (buscar dados), POST (criar/enviar), PUT/PATCH (atualizar) e DELETE (remover). Além deles, o navegador pode disparar um OPTIONS automaticamente, especialmente em cenários com CORS (já chegaremos lá).
Status codes (códigos de resposta)
Aprender a ler status codes é meio caminho para depurar bugs:
200–299: sucesso (ex.: 200 OK, 201 Created, 204 No Content).
300–399: redirecionamentos (ex.: 301, 302).
400–499: erro do cliente (ex.: 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 429 Too Many Requests).
500–599: erro do servidor (ex.: 500 Internal Server Error).
Headers: o “contrato” invisível
Headers carregam metadados importantes: tipo do conteúdo, autorização, idioma, cache etc. Os mais comuns no dia a dia:
Content-Type: define o formato (ex.: application/json).
Accept: o que o cliente espera receber.
Authorization: tokens (Bearer) e credenciais.
Cache-Control: políticas de cache.
2) Consumindo APIs com fetch: exemplos práticos
O fetch é a API nativa do navegador para requisições. Ele retorna uma Promise, o que combina bem com async/await.
GET simples (buscar dados)
Exemplo de busca e conversão para JSON:

async function carregarProdutos() { const response = await fetch('https://api.exemplo.com/produtos'); if (!response.ok) { throw new Error(`Erro HTTP: ${response.status}`); } const data = await response.json(); return data; } 
POST com JSON (enviar dados)
async function criarPedido(pedido) { const response = await fetch('https://api.exemplo.com/pedidos', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, body: JSON.stringify(pedido) }); if (!response.ok) { const texto = await response.text(); throw new Error(`Falha ao criar pedido (${response.status}): ${texto}`); } return response.json(); } 
Timeout e cancelamento (AbortController)
Nem toda rede é confiável. Cancelar requisições evita UI travada e condições de corrida:
async function buscarComTimeout(url, timeoutMs = 8000) { const controller = new AbortController(); const timer = setTimeout(() => controller.abort(), timeoutMs); try { const response = await fetch(url, { signal: controller.signal }); if (!response.ok) throw new Error(`HTTP ${response.status}`); return await response.json(); } finally { clearTimeout(timer); } } 
3) CORS: por que o navegador bloqueia e como resolver do jeito certo
CORS (Cross-Origin Resource Sharing) é uma política de segurança do navegador. Ela impede que um site em um “origin” (combinação de protocolo + domínio + porta) acesse recursos de outro origin sem permissão explícita do servidor.
Exemplo de origins diferentes:
https://site.com e https://api.site.com (domínios diferentes)
http://localhost:3000 e http://localhost:8080 (portas diferentes)
http:// e https:// (protocolos diferentes)
O que é “preflight” (requisição OPTIONS)
Em muitas requisições (principalmente com headers customizados, métodos como PUT/DELETE ou Content-Type não simples), o navegador faz antes um OPTIONS para perguntar ao servidor se aquela chamada é permitida. Se o servidor não responder com os headers CORS corretos, o navegador bloqueia, mesmo que a API “funcione” fora do browser.
Headers CORS mais comuns
Access-Control-Allow-Origin: quais origens podem acessar (ex.: https://meusite.com).
Access-Control-Allow-Methods: métodos permitidos (GET, POST…).
Access-Control-Allow-Headers: headers permitidos (Authorization, Content-Type…).
Access-Control-Allow-Credentials: se permite cookies/credenciais.
O jeito correto de “resolver CORS”
CORS é resolvido no servidor (ou via proxy/reverse proxy). No front-end, não existe uma configuração mágica que “libere CORS” com segurança. Extensões do navegador e flags de desativar segurança só servem para testes locais e mascaram problemas reais.
Se você controla o backend, habilite CORS para os domínios necessários e apenas eles. Se você não controla, opções comuns são:
Consumir a API pelo seu backend (BFF/proxy) e expor um endpoint no mesmo origin do front-end.
Usar um gateway/reverse proxy (por exemplo, Nginx) para unificar o origin.
Referência externa útil: documentação do MDN sobre CORS em https://developer.mozilla.org/pt-BR/docs/Web/HTTP/CORS.
4) Autenticação no front-end: Bearer token, cookies e boas práticas
Ao consumir APIs com áreas logadas, é comum usar:
Bearer Token no header Authorization (frequentemente JWT).
Cookies (sessão), com atenção para SameSite/Secure/HttpOnly.
Bearer token com fetch
async function buscarPerfil(token) { const response = await fetch('https://api.exemplo.com/me', { headers: { 'Authorization': `Bearer ${token}`, 'Accept': 'application/json' } }); if (response.status === 401) { throw new Error('Não autorizado: faça login novamente.'); } if (!response.ok) { throw new Error(`Erro: ${response.status}`); } return response.json(); } 
Com cookies (credentials)
Quando a API autentica via cookie, você pode precisar enviar credenciais:
await fetch('https://api.exemplo.com/me', { credentials: 'include' }); 
Atenção: para isso funcionar entre origens, o servidor precisa configurar CORS com Access-Control-Allow-Credentials: true e não pode usar Allow-Origin com * ao mesmo tempo.
5) Tratamento de erros: o padrão que evita bugs silenciosos
Um detalhe importante: o fetch não falha (reject) automaticamente para HTTP 404/500; ele só rejeita em erros de rede. Por isso, sempre valide response.ok e trate respostas não-JSON quando necessário.
Checklist rápido de depuração:
Abra a aba Network do DevTools e confira URL, método, status e headers.
Veja o body de erro (muitas APIs retornam mensagens úteis).
Procure por requisição OPTIONS antes do GET/POST (sinal de preflight).
Confirme se o endpoint é HTTPS e se o certificado é válido.
Valide se o token está presente e não expirou.
6) Como escolher o que estudar em seguida (trilha recomendada)
Para evoluir do “consumo básico” para aplicações profissionais, a sequência costuma funcionar muito bem:
HTML e CSS para estruturar e apresentar os dados vindos da API.
JavaScript para requisições, estado de UI, validações e interação.
Consumo de APIs (HTTP, fetch, CORS, autenticação e segurança).
Frameworks quando fizer sentido (por exemplo, bibliotecas para UI e gerenciamento de estado).
Explore cursos por assunto: https://cursa.app/cursos-gratuitos-online/javascript, https://cursa.app/cursos-gratuitos-online/html e https://cursa.app/cursos-gratuitos-online/css. Se o objetivo também inclui trabalhar com integrações e páginas dinâmicas no lado do servidor, há materiais de https://cursa.app/cursos-gratuitos-online/php para complementar.
Conclusão
Entender HTTP, dominar o fetch e saber lidar com CORS transforma o consumo de APIs em algo previsível: você para de “tentar até funcionar” e passa a diagnosticar com clareza o que está acontecendo entre navegador e servidor. Esse conhecimento eleva a qualidade do front-end, melhora a segurança e reduz tempo perdido com erros que parecem misteriosos.

Compartilhar no Linkedin Compartilhar no WhatsApp
Imagem do artigo Design Systems no Front-End: Como Criar Interfaces Consistentes, Escaláveis e Fáceis de Manter
Imagem do artigo CSS Moderno no Front-End: Layouts com Flexbox e Grid, Responsividade e Escalabilidade
Imagem do artigo Acessibilidade no Front-End: Como Criar Sites Inclusivos com HTML, CSS e JavaScript
Imagem do artigo Otimizando o Desenvolvimento de Interfaces Dinâmicas com CodeIgniter
Imagem do artigo Boas Práticas de Estruturação de Projetos com CodeIgniter: Mantenha Seu Código Organizado
Imagem do artigo Personalizando Componentes com Bootstrap: Dicas e Boas Práticas
Imagem do artigo Introdução ao Sistema de Grid do Bootstrap: Organizando seu Layout com Facilidade
Imagem do artigo Animações com CSS: Transforme a Experiência dos Usuários em seu Site