Neste artigo
- O que é dinâmico num site e o que não é
- Como funciona um Worker
- Worker ou Pages Function: qual usar
- Exemplo: formulário de contato com Pages Function
- Segredos e variáveis de ambiente
- Consumir uma API sem expor a chave
- Proteger formulário contra robôs com Turnstile
- Limites e preço do Workers
- Quando Workers não é a melhor saída
- 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);
}
- Crie a pasta functions/api no projeto da Pages.
- Salve o código acima como contato.js.
- Cadastre a chave do serviço de e-mail como segredo.
- Teste localmente, enviando o formulário com e sem os campos.
- 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.