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

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

ใช้เส้นทางเนื้อหานี้หลังการเลือกเป้าหมาย คำขอไปยังต้นทาง และการเตรียมสถานะและส่วนหัวไปยังปลายทาง สตรีมของ Node มักให้ Buffer อย่ารวบรวมไว้ในสตริงสำหรับรูปภาพหรือเนื้อหาไบนารีอื่นที่ไม่เปลี่ยนแปลง

pipeline ประสานแรงดันย้อนกลับและแพร่กระจายความล้มเหลว อาจทำลายปลายทางเมื่อเกิดข้อผิดพลาด ดังนั้นอย่าสันนิษฐานว่าสามารถส่งการตอบสนองข้อผิดพลาด HTTP อื่นได้หลังจากนั้น ชิ้นส่วนนี้ไม่ใช่พร็อกซีเซิร์ฟเวอร์เต็มรูปแบบ

สำหรับไบต์ที่ผ่านไป ให้เก็บเมตาดาต้าของการนำเสนอที่เกี่ยวข้อง เช่น ชนิดสื่อและการเข้ารหัสเนื้อหา และจัดการฟิลด์เฉพาะฮอปผ่านกฎการส่งต่อ การเปรียบเทียบไบต์ gzip กับส่วนหัวการตอบสนองที่ตรงกันแสดงการเลือกระหว่างการนำเสนอที่เข้ารหัสแล้วและที่ถอดรหัสแล้ว

การเขียน HTML ใหม่โดยตั้งใจต้องใช้เส้นทางอื่น: รู้จักชนิดสื่อ จัดการการบีบอัดและชุดอักขระ แปลงข้อความ และสร้างเมตาดาต้าสำหรับไบต์ใหม่ Content-Length เดิมไม่อาจอธิบายเนื้อหาที่เปลี่ยนไปได้

Buffer.concat สามารถรักษาเนื้อหาไบนารีไว้ได้เมื่อจำเป็นต้องบัฟเฟอร์ทั้งหมด แต่เก็บเนื้อหาทั้งหมดไว้ในหน่วยความจำ สตรีมรูปภาพที่ผ่านไปไม่จำเป็นต้องเสียค่าใช้จ่ายนั้น

บทความที่เกี่ยวข้อง