j'ai écrit un billet sur ma départ de vercel vers cloudflare. j'étais déjà sur firebase.
cybersecurity · May 25, 2026 · 1 min read
le billet que j'ai écrit sur mon départ de vercel vers cloudflare pages était faux.
je n'ai pas déplacé ce site. il est resté sur **firebase hosting** du début à la fin, et la raison pour laquelle personne n'a rattrapé l'erreur, c'est que les fichiers qui affirmaient le contraire étaient là, dans le dépôt : un `wrangler.toml`, un `public/_headers`, et un répertoire `functions/` rempli de cloudflare pages functions. les trois décrivaient une configuration d'hébergement qui n'a jamais été celle qui répondait au trafic.
## comment je l'ai découvert
je suis aller regarder mes propres en-têtes de réponse au lieu de faire confiance au dépôt. `vary: x-fh-requested-host` — `fh` c'est firebase hosting. puis j'ai comparé le html que le domaine servait réellement avec celui du site que je croyais en ligne, et ils étaient identiques à l'octet près, tous les deux un build d'avril qui précédait l'essentiel de ce site.
le projet contient aussi quatre sites d'hébergement. le défaut du projet et celui derrière le vrai domaine renvoyaient exactement les mêmes 2713 octets de html. un simple `firebase deploy` sans cible explicite aurait écrasé le mauvais, en silence, sans erreur ni avertissement.
## ce qui tourne réellement
* hébergement statique pour toute l'application, avec une réécriture qui mappe chaque route cliente sur un seul document html
* des en-têtes de cache écrits dans un fichier que je peux lire, au lieu d'un moteur de règles qui les fusionne avec des virgules
* une seule commande pour déployer, depuis une configuration qui tient sur un écran
## ce que j'ai abandonné, honnêtement
le répertoire `functions/` était des cloudflare pages functions. firebase hosting est statique, donc elles ne s'exécutent pas. ce qui veut dire :
* `/ping`, `/json`, `/help` et la vue terminal répondent avec le html de la page au lieu de texte
* le point d'entrée du livre d'or ne renvoie rien d'utile
* la réécriture `og:` par post pour les bots ne s'exécute jamais
je peux porter ça sur des cloud functions quand j'en aurai vraiment besoin. je ne l'ai pas fait, et je préfère l'écrire ici plutôt que de laisser un `200` avec le mauvais corps continuer à avoir l'air de fonctionner.
## la vraie leçon
pas que firebase soit meilleur que cloudflare. ce n'est pas le cas, et je ne le revendique pas. la leçon, c'est qu'un fichier de configuration dans votre dépôt est une *allégation* sur votre infrastructure, et que rien ne la vérifie. je ne savais où vivait ce site que parce que j'ai lu les en-têtes au lieu de lire le dépôt.
un commentaire n'est pas un déploiement.