Mundos
Mundo Criação de Sites

Como dar funções dinâmicas a um site HTML com APIs e Cloudflare Workers

Resposta rápida

Um site em HTML puro ganha funções dinâmicas quando você liga os pontos que precisam de servidor a um Cloudflare Worker. Worker é um pequeno programa em JavaScript que roda na rede da Cloudflare e responde a requisições. Com ele, o site estático recebe formulário, consulta APIs, protege chaves e até controla acesso, sem PHP e sem banco de dados. As páginas continuam estáticas e rápidas. A base dessa arquitetura está no guia criar sites sem WordPress.

Rápido: deixe as páginas em HTML e coloque só o que é dinâmico (formulário, API, login) num Worker, com as chaves guardadas como segredo.

Ler artigo completo Quero meu site grátis
Neste artigo
  1. O que é dinâmico num site e o que não é
  2. Como funciona um Worker
  3. Worker ou Pages Function: qual usar
  4. Exemplo: formulário de contato com Pages Function
  5. Segredos e variáveis de ambiente
  6. Consumir uma API sem expor a chave
  7. Proteger formulário contra robôs com Turnstile
  8. Limites e preço do Workers
  9. Quando Workers não é a melhor saída
  10. Em outros Mundos

O que é dinâmico num site e o que não é

Dinâmico é tudo que muda conforme quem acessa ou o que a pessoa envia. Texto institucional, foto, preço fixo e página de serviço são estáticos. Envio de formulário, resultado de busca e área logada são dinâmicos.

Na prática, a maior parte de um site de empresa é estática. Por isso a arquitetura HTML mais Worker funciona: 95 páginas fixas e uma função para o formulário. O conceito completo de site sem servidor está em sites estáticos.

Recurso do site Estático ou dinâmico Como resolver no HTML puro
Páginas de serviço e sobre Estático Arquivo HTML
Botão de WhatsApp Estático Link no HTML, sem código no servidor
Formulário de contato Dinâmico Worker ou Pages Function
Consulta de CEP, frete ou cotação Dinâmico Worker chamando a API externa
Busca interna Pode ser estático Índice JSON gerado no build e lido no navegador
Login e área restrita Dinâmico Serviço de autenticação ou Cloudflare Access
Lista de posts Estático Gerada pelo gerador de sites estáticos

Como funciona um Worker

O Worker tem uma função chamada fetch, que a Cloudflare chama sempre que chega uma requisição HTTP. Ela recebe o pedido, o objeto env com variáveis e segredos, e devolve uma resposta. O exemplo mínimo da documentação oficial é este:

export default {
  async fetch(request, env, ctx) {
    return new Response("Hello World!");
  },
};

Para criar o projeto, a Cloudflare indica o comando abaixo. Ele usa o Wrangler, a ferramenta de linha de comando da Cloudflare.

npm create cloudflare@latest -- meu-worker
npx wrangler dev
npx wrangler deploy

O wrangler dev roda o Worker no seu computador, em localhost:8787. O wrangler deploy publica a versão na Cloudflare, por padrão num subdomínio workers.dev. Deploy é o nome que se dá à publicação de uma versão nova.

Worker ou Pages Function: qual usar

Se o site já está na Cloudflare Pages, o caminho mais simples é a Pages Function. Você cria uma pasta functions no projeto e cada arquivo vira uma rota. A documentação dá o exemplo: functions/helloworld.js responde em /helloworld.

Se a requisição não bate com nenhuma função, a Pages entrega o arquivo estático do mesmo caminho. Assim, HTML e função convivem no mesmo repositório do GitHub.

O Worker avulso faz sentido quando a função atende mais de um site ou quando você quer configurar tudo pelo Wrangler. O Worker também pode servir arquivos estáticos: a pasta indicada em assets no arquivo de configuração é entregue sem executar o código.

{
  "name": "meu-site",
  "main": "src/index.js",
  "assets": { "directory": "./dist", "binding": "ASSETS" }
}

Exemplo: formulário de contato com Pages Function

O formulário HTML aponta para a rota da função. O navegador envia os campos e a função decide o que fazer com eles.

<form action="/api/contato" method="post">
  <label>Nome <input name="nome" required></label>
  <label>E-mail <input name="email" type="email" required></label>
  <label>Mensagem <textarea name="mensagem" required></textarea></label>
  <button type="submit">Enviar</button>
</form>

A função fica em functions/api/contato.js. Ela lê os campos, faz uma validação básica e repassa para um serviço de e-mail ou planilha.

export async function onRequest(context) {
  if (context.request.method !== "POST") {
    return new Response("Método não permitido", { status: 405 });
  }
  const dados = await context.request.formData();
  const nome = String(dados.get("nome") || "").slice(0, 100);
  const email = String(dados.get("email") || "").slice(0, 200);
  if (!nome || !email.includes("@")) {
    return new Response("Preencha nome e e-mail", { status: 400 });
  }
  // aqui entra a chamada ao serviço de e-mail, usando context.env.CHAVE_EMAIL
  return Response.redirect(new URL("/obrigado/", context.request.url), 303);
}
  1. Crie a pasta functions/api no projeto da Pages.
  2. Salve o código acima como contato.js.
  3. Cadastre a chave do serviço de e-mail como segredo.
  4. Teste localmente, enviando o formulário com e sem os campos.
  5. Faça o push para o GitHub e confira o deploy automático.

O MundoBlá recebe uma comissão da HostGator quando você contrata a hospedagem pelo nosso link, sem custo extra para você. Se o site terá formulário com função ou só botão de WhatsApp, isso é combinado no WhatsApp antes de começar.

Segredos e variáveis de ambiente

Segredo é um valor sensível, como chave de API ou senha, guardado criptografado na Cloudflare. A documentação diz que, depois de salvo, o valor não aparece mais no Wrangler nem no painel. Variável comum (vars) fica em texto aberto e não serve para dado sensível.

Você cadastra o segredo com um comando ou pelo painel, em Workers & Pages, Settings, Variables and Secrets.

npx wrangler secret put CHAVE_EMAIL

No código, o segredo aparece em env.CHAVE_EMAIL, ou context.env na Pages Function. Para testar no computador, crie o arquivo .dev.vars ao lado da configuração do Wrangler:

CHAVE_EMAIL="valor-de-teste"

A própria Cloudflare recomenda colocar .dev.vars e .env no .gitignore. Esse é o erro mais comum em site estático: chave de API dentro do JavaScript público ou enviada ao GitHub. A página segurança de sites estáticos aprofunda os cuidados.

Consumir uma API sem expor a chave

Quando o site precisa de dado externo, como cotação ou CEP, o Worker funciona como intermediário. O navegador pede ao Worker, o Worker chama a API com a chave e devolve só o resultado.

export default {
  async fetch(request, env) {
    const url = new URL(request.url);
    const cep = (url.searchParams.get("cep") || "").replace(/\D/g, "");
    if (cep.length !== 8) return new Response("CEP inválido", { status: 400 });
    // API_URL é o endereço da API, guardado como variável do Worker
    const r = await fetch(`${env.API_URL}/cep/${cep}`, {
      headers: { Authorization: `Bearer ${env.CHAVE_API}` },
    });
    return new Response(await r.text(), {
      headers: { "content-type": "application/json" },
    });
  },
};

Esse padrão também evita o erro de CORS, que acontece quando o navegador bloqueia a chamada direta a outro domínio. Cada chamada que o Worker faz para fora conta como subrequisição. Pela página de limites, o plano grátis permite 50 por execução.

Proteger formulário contra robôs com Turnstile

Turnstile é a alternativa da Cloudflare ao CAPTCHA, que funciona sem obrigar o visitante a resolver desafio. O widget no HTML gera um token. O Worker confere esse token antes de aceitar o envio.

A conferência é um POST para o endereço challenges.cloudflare.com/turnstile/v0/siteverify com dois campos obrigatórios: secret, a chave secreta do widget, e response, o token vindo do navegador. O IP do visitante é opcional. Sem essa etapa no servidor, o robô ignora a proteção.

Limites e preço do Workers

Os números abaixo vêm das páginas de preços e limites da Cloudflare, abertas em 5 de novembro de 2026. Confira antes de dimensionar um projeto, porque mudam com o tempo.

Item Workers Free Workers Paid
Preço Grátis Mínimo de 5 dólares por mês por conta
Requisições 100.000 por dia 10 milhões por mês incluídas, depois 0,30 dólar por milhão
CPU por requisição 10 ms Até 5 minutos (padrão de 30 segundos)
Subrequisições por execução 50 10.000
Workers por conta 100 500
Variáveis de ambiente por Worker 64 (até 5 KB cada) 128 (até 5 KB cada)
Arquivos estáticos Grátis e ilimitados Grátis e ilimitados

O ponto que mais pesa para site HTML: requisição a arquivo estático é grátis e ilimitada, nos dois planos. Só conta a requisição que executa código. A página de preços das Pages Functions confirma que elas são cobradas como requisições de Workers e que o limite diário do plano grátis zera à meia-noite UTC.

Para a conta completa de domínio, hospedagem e ferramentas, veja quanto custa manter um site com HTML e Cloudflare.

Quando Workers não é a melhor saída

Workers resolve bem funções curtas. Sistema com cadastro de clientes, estoque, pagamento e relatório pede banco de dados e regra de negócio maior. Para isso existem os bancos e filas da própria Cloudflare, ou um servidor tradicional. Leia sites sem banco de dados para ver até onde dá para ir sem banco.

Se o site é um WordPress com loja e área de membros, mudar tudo para Workers costuma custar mais do que manter o painel bem cuidado. A comparação honesta está em alternativas ao WordPress.

Se você chegou agora, a resposta curta sobre o Mundo Criação de Sites organiza o caminho, e a resposta sobre GitHub para sites mostra onde guardar o código. Dúvidas de outros assuntos têm resposta na página inicial.

Para ver a arquitetura inteira, volte ao guia Web livre: HTML, GitHub e Cloudflare.

Em outros Mundos

Para aprender o JavaScript que o Worker usa, passe pelo Mundo Programação. Notícias e guias de ferramentas digitais estão no Mundo Tecnologia.

Perguntas frequentes

O que é o Cloudflare Workers?

Cloudflare Workers é um serviço que roda pequenos programas em JavaScript na rede da Cloudflare, sem você manter servidor. Cada programa responde a uma requisição HTTP com uma função chamada fetch. É assim que um site em HTML puro ganha formulário, consulta a API e outras partes dinâmicas.

Site em HTML puro consegue ter formulário de contato?

Consegue. O formulário envia os dados para uma função, que pode ser um Worker ou uma Pages Function, e ela repassa para o seu e-mail, planilha ou sistema. O HTML continua estático; só o envio passa pelo código. Proteja o formulário contra robôs antes de publicar.

Quanto custa usar Cloudflare Workers?

O plano grátis permite 100.000 requisições por dia, com 10 milissegundos de CPU por chamada. O plano pago tem cobrança mínima de 5 dólares por mês por conta e inclui 10 milhões de requisições mensais. Confira os valores na página de preços da Cloudflare, porque podem mudar.

Requisição de página estática conta no limite do Workers?

Não. A documentação da Cloudflare diz que requisições a arquivos estáticos são grátis e ilimitadas, nos planos grátis e pagos. Só conta a requisição que executa código, como o envio de um formulário. Por isso um site em HTML com uma função pequena costuma caber no plano grátis.

Qual a diferença entre Worker e Pages Function?

Pages Function é um Worker criado a partir de arquivos na pasta functions de um projeto da Cloudflare Pages. O caminho do arquivo vira a rota. O Worker avulso é configurado à parte, com o arquivo de configuração do Wrangler. Os dois rodam na mesma plataforma e contam no mesmo limite.

Onde guardar a chave de API num site estático?

Nunca no HTML nem no JavaScript que vai para o navegador, porque qualquer visitante lê o código. Guarde a chave como segredo do Worker, com o comando wrangler secret put ou pelo painel. O código lê o segredo em env.NOME e o valor não aparece depois de salvo.

O que é o arquivo .dev.vars?

É o arquivo onde você guarda os segredos para testar o Worker no seu computador, no formato NOME igual a valor. Ele fica ao lado do arquivo de configuração do Wrangler. Coloque .dev.vars no .gitignore para não enviar a chave ao GitHub junto com o código.

Preciso saber programar para usar Workers?

Precisa de noção de JavaScript, porque o Worker é código. Um formulário simples tem poucas linhas e há modelos prontos na documentação. Se você nunca programou, comece pelo HTML e deixe a parte dinâmica para depois, ou peça para um desenvolvedor configurar.

Dá para fazer login de usuário num site em HTML?

Dá, mas é a parte mais delicada. O Worker pode validar um token emitido por um serviço de autenticação ou proteger uma área com o Cloudflare Access. Escrever um sistema de senha do zero não é recomendado para iniciante. Para área de membros grande, um sistema pronto costuma ser mais seguro.

Como evitar spam no formulário de site estático?

Use o Turnstile, a alternativa da Cloudflare ao CAPTCHA. O navegador recebe um token e o Worker confere esse token no endpoint siteverify antes de aceitar o envio. Sem a conferência no servidor, o robô pula a proteção. Some a isso um campo escondido e limite de tamanho.

Quantas variáveis de ambiente um Worker aceita?

A documentação de limites da Cloudflare indica 64 variáveis por Worker no plano grátis e 128 no pago, cada uma com até 5 KB. Segredos e variáveis comuns são lidos do mesmo jeito no código. A diferença é que o segredo fica criptografado e não aparece no painel.

O Worker pode chamar uma API de outra empresa?

Pode. O Worker faz a chamada com fetch, acrescenta a chave guardada como segredo e devolve só o que o site precisa. Isso esconde a chave e evita erro de CORS no navegador. No plano grátis, cada execução pode fazer até 50 subrequisições, segundo a página de limites.

O que acontece se eu passar do limite grátis?

No plano grátis, as requisições que executam código param de ser atendidas até o limite diário zerar, à meia-noite UTC. As páginas estáticas continuam no ar, porque não contam no limite. Se o seu formulário recebe volume alto, avalie o plano pago antes de chegar ao teto.

Workers substitui um backend completo?

Para funções pequenas, sim: formulário, busca em API, redirecionamento, cálculo. Para sistema com banco relacional, fila e regra de negócio complexa, a Cloudflare tem outros produtos, e um servidor tradicional também é opção. Comece pequeno e só cresça quando o site pedir.

Como testar o Worker antes de publicar?

Rode npx wrangler dev na pasta do projeto. O Worker sobe no seu computador, em localhost na porta 8787, e lê os segredos do .dev.vars. Teste o envio do formulário, o erro de campo vazio e a resposta da API. Só depois rode npx wrangler deploy.

Workers serve para site WordPress também?

Serve. O Worker fica na frente de qualquer site que use a Cloudflare, inclusive WordPress, e pode reescrever cabeçalho, redirecionar ou guardar cache. O ganho é maior no site estático, porque ali ele é a única parte dinâmica. No WordPress, ele complementa o PHP.

O MundoBlá cria o site em HTML com formulário?

O MundoBlá cria o site em HTML puro sem cobrar pela criação, na condição de você contratar a hospedagem anual da HostGator pelo nosso link. Se o site terá formulário, função na Cloudflare ou só botão de WhatsApp, isso entra no escopo combinado no WhatsApp antes de começar.

Fontes e data de verificação

Cloudflare Docs: Workers Get started, Workers Pricing, Workers Limits, Secrets, Workers Static Assets, Pages Functions Routing, Pages Functions Pricing, Turnstile server-side validation. Conferido em 5 de novembro de 2026.

Referências

  • Cloudflare Docs: Workers, Get started. Disponível em: https://developers.cloudflare.com/workers/get-started/guide/.
  • Cloudflare Docs: Workers Pricing. Disponível em: https://developers.cloudflare.com/workers/platform/pricing/.
  • Cloudflare Docs: Workers Limits. Disponível em: https://developers.cloudflare.com/workers/platform/limits/.
  • Cloudflare Docs: Secrets. Disponível em: https://developers.cloudflare.com/workers/configuration/secrets/.
  • Cloudflare Docs: Workers Static Assets. Disponível em: https://developers.cloudflare.com/workers/static-assets/.
  • Cloudflare Docs: Pages Functions Routing. Disponível em: https://developers.cloudflare.com/pages/functions/routing/.
  • Cloudflare Docs: Pages Functions Pricing. Disponível em: https://developers.cloudflare.com/pages/functions/pricing/.
  • Cloudflare Docs: Turnstile server-side validation. Disponível em: https://developers.cloudflare.com/turnstile/get-started/server-side-validation/.

Fontes conferidas em 05 de novembro de 2026.

Carregando avaliações… — visitas
Escrito por

Redação MundoBlá

Equipe editorial

Equipe que pesquisa, escreve e revisa os guias do MundoBlá. Todo conteúdo cita fontes oficiais e mostra a data da última conferência. Perfis de especialistas reais entram aqui só quando houver pessoa verificada.

Quero meu site grátis