Ce qui se passe
Le 29 octobre 2026, l'équipe Node.js a publié v27.0.0-alpha.0.0.0, première version du nouveau calendrier annuel :
une phase alpha de six mois, la version Current en avril 2027 et le passage en LTS en octobre 2027.
La fiche du 6 novembre traitait de V8 et de la sérialisation ; deux changements du serveur HTTP restent à voir.
1. keepAliveTimeout : de 5 à 65 secondes
http.Server fermait une connexion inactive au bout de 5 s. Or un répartiteur de charge garde souvent la
sienne plus longtemps : le délai d'inactivité par défaut d'un AWS ALB est de 60 s. Si Node ferme le socket au
moment où le proxy le réutilise, la requête échoue en 502 Bad Gateway, de façon intermittente et difficile à
reproduire. Le nouveau défaut de 65 000 ms dépasse ces 60 s. La temporisation réelle du socket ajoute
keepAliveTimeoutBuffer, 1 s par défaut.
65 s ne couvrent pas toutes les configurations. Regardez le délai d'inactivité réel de votre proxy (Nginx, Cloudflare, ALB) et réglez le vôtre au-dessus. Cela marche aujourd'hui, sur n'importe quelle version :
server.keepAliveTimeout = 65_000; // > délai d'inactivité du proxy2. req.headers et req.trailers n'ont plus de prototype
Les dictionnaires d'en-têtes des requêtes entrantes héritent de null au lieu d'Object.prototype, comme le
faisaient déjà headersDistinct et trailersDistinct. Les noms d'en-têtes sont choisis par l'émetteur de la
requête : un client peut envoyer un en-tête constructor ou __proto__, qui arrive tel quel sous cette clé.
Le changement vient de la PR #62900 de Matteo Collina, dont le message parle de pollution de prototype.
Le précédent est réel : CVE-2026-21710, corrigée dans les versions de sécurité de mars 2026, pouvait faire
planter le processus quand une requête avec un en-tête __proto__ touchait req.headersDistinct.
La lecture, la déstructuration et Object.keys() ne changent pas. Ce qui casse, c'est l'appel d'une méthode
héritée :
req.headers.hasOwnProperty('authorization'); // Node 27 : TypeError
Object.hasOwn(req.headers, 'authorization'); // marche en Node 26 comme en 27L'opérateur in fonctionne encore, mais la documentation déconseille de s'en servir ici. Ne restaurez pas
Object.prototype sur l'objet pour « réparer » : c'est exactement ce que la rupture voulait éviter.
Comment s'y prendre
grep -rn "headers.hasOwnProperty" src/et remplacez parObject.hasOwn(req.headers, '…').- Fixez
keepAliveTimeoutexplicitement au-dessus du délai de votre proxy. - Ajoutez Node 27 alpha à votre CI, en tâche non bloquante : l'alpha sert à repérer ces ruptures avant la version Current. Gardez une LTS en production au moins jusqu'en avril 2027.
Source : Node.js Design Patterns, en anglais, qui renvoie à la PR #62900 et aux versions de sécurité de mars 2026.