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

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

Χρησιμοποιήστε αυτή τη διαδρομή σώματος μετά την επιλογή προορισμού, το αίτημα προς την πηγή και την προετοιμασία κατάστασης και κεφαλίδων προς τον πελάτη. Τα streams του Node συνήθως παρέχουν Buffers· μη τα συσσωρεύετε σε συμβολοσειρά για εικόνες ή άλλο αμετάβλητο δυαδικό περιεχόμενο.

Το pipeline συντονίζει την αντίθλιψη και διαδίδει τις αποτυχίες. Μπορεί να καταστρέψει τον προορισμό σε σφάλμα, οπότε μην υποθέσετε ότι μπορεί να σταλεί μετά άλλη απόκριση σφάλματος HTTP. Αυτό το τμήμα δεν είναι πλήρης διακομιστής proxy.

Για τα byte που διέρχονται, διατηρήστε τα σχετικά μεταδεδομένα αναπαράστασης, όπως τον τύπο μέσου και την κωδικοποίηση περιεχομένου, και χειριστείτε τα πεδία ανά hop μέσω κανόνων προώθησης. Μια σύγκριση byte gzip και αντίστοιχων κεφαλίδων απόκρισης δείχνει την επιλογή μεταξύ κωδικοποιημένης και αποκωδικοποιημένης αναπαράστασης.

Η σκόπιμη επανεγγραφή HTML χρειάζεται άλλη διαδρομή: αναγνωρίστε τον τύπο μέσου, χειριστείτε τη συμπίεση και το σύνολο χαρακτήρων, μετασχηματίστε το κείμενο και δημιουργήστε μεταδεδομένα για τα νέα byte. Το παλιό Content-Length δεν μπορεί να περιγράψει ένα αλλαγμένο σώμα.

Το Buffer.concat μπορεί να διατηρήσει δυαδικό περιεχόμενο όταν απαιτείται πλήρης προσωρινή αποθήκευση, αλλά κρατά ολόκληρο το σώμα στη μνήμη. Ένα stream εικόνας που διέρχεται δεν χρειάζεται αυτό το κόστος.

Σχετικά άρθρα