Les Cloudflare Workers permettent d’exécuter du code JavaScript ou Wasm à l’edge, à chaque requête, sans gérer de serveur. 100 000 requêtes/jour gratuit. Cas d’usage : redirections intelligentes, A/B testing, transformations de réponse, géo-routing, edge auth.
Voir notre guide Cloudflare.
Premier Worker
# Installer wrangler CLI
npm install -g wrangler
wrangler login
# Créer un projet
wrangler init mon-worker
cd mon-worker
// src/index.ts
export default {
async fetch(request: Request): Promise<Response> {
const url = new URL(request.url);
// Géo-routing simple
const country = request.headers.get("CF-IPCountry") ?? "XX";
if (country === "SN" || country === "CI") {
url.hostname = "afrique.exemple.sn";
return Response.redirect(url.toString(), 302);
}
return fetch(request);
},
};
# Tester
wrangler dev
# Déployer
wrangler deploy
Cas d’usage : A/B testing
export default {
async fetch(request: Request): Promise<Response> {
const url = new URL(request.url);
const cookie = request.headers.get("Cookie") ?? "";
let variant = cookie.match(/ab_variant=(\w)/)?.[1];
if (!variant) {
variant = Math.random() < 0.5 ? "A" : "B";
}
// Modifier l'URL selon variant
if (variant === "B") {
url.pathname = "/v2" + url.pathname;
}
const response = await fetch(url.toString());
const newResponse = new Response(response.body, response);
newResponse.headers.append("Set-Cookie", `ab_variant=${variant}; Path=/; Max-Age=2592000`);
return newResponse;
},
};
Cas d’usage : transform response
export default {
async fetch(request: Request): Promise<Response> {
const response = await fetch(request);
return new HTMLRewriter()
.on("a[href*='old-domain.com']", {
element(el) {
const href = el.getAttribute("href");
if (href) el.setAttribute("href", href.replace("old-domain.com", "new-domain.sn"));
},
})
.transform(response);
},
};
Limites Free
- 100 000 requêtes/jour
- 10 ms CPU par requête (largement suffisant pour transformations légères)
- 1 Mo bundle taille
- Plan Paid : 5 USD/mois pour 10M requêtes + 50 ms CPU