const { pipeline } = require('node:stream');

pipeline(upstreamResponse, clientResponse, (error) => {
  if (error) console.error('Proxy response failed:', error);
});

Utilisez ce chemin de corps après le choix de la cible, la requête vers l'amont et la préparation du statut et des en-têtes vers le client. Les flux Node fournissent normalement des Buffer ; ne les accumulez pas dans une chaîne pour les images ou tout autre contenu binaire inchangé.

pipeline coordonne la contre-pression et propage les échecs. Il peut détruire la destination en cas d'erreur, aussi ne supposez pas qu'une autre réponse d'erreur HTTP puisse être envoyée ensuite. Ce fragment n'est pas un serveur proxy complet.

Pour les octets qui transitent, conservez les métadonnées de représentation pertinentes, comme le type de média et l'encodage du contenu, et traitez les champs propres à chaque saut via les règles de transfert. Une comparaison entre octets gzip et en-têtes de réponse correspondants montre le choix entre représentation encodée et décodée.

La réécriture volontaire du HTML exige un autre chemin : reconnaître son type de média, gérer la compression et le jeu de caractères, transformer le texte et générer des métadonnées pour les nouveaux octets. L'ancien Content-Length ne peut pas décrire un corps modifié.

Buffer.concat peut conserver un contenu binaire lorsqu'une mise en mémoire complète est nécessaire, mais stocke tout le corps en mémoire. Un flux d'image qui transite n'a pas besoin de ce coût.

Articles similaires