ბინარული სურათის პასუხების შენახვა Node.js პროქსიში
გადაიტანეთ ბინარული სხეულები Node-ის წინა პროქსის გავლით და ტექსტის დეკოდირება დატოვეთ მხოლოდ განზრახ ტექსტურ გარდაქმნებს.
const { pipeline } = require('node:stream');
pipeline(upstreamResponse, clientResponse, (error) => {
if (error) console.error('Proxy response failed:', error);
});
გამოიყენეთ სხეულის ეს გზა სამიზნის არჩევის, ზედა დინების მოთხოვნისა და ქვედა დინების სტატუსისა და თავსართების მომზადების შემდეგ. Node-ის ნაკადები ჩვეულებრივ Buffer-ებს გვაძლევს; ნუ დააგროვებთ მათ სტრიქონში სურათებისთვის ან სხვა უცვლელი ბინარული შიგთავსისთვის.
pipeline აკოორდინირებს უკუწნეხას და ავრცელებს წარუმატებლობებს. შეცდომისას მან შეიძლება გაანადგუროს დანიშნულება, ამიტომ ნუ ჩათვლით, რომ ამის შემდეგ შეიძლება კიდევ ერთი HTTP შეცდომის პასუხის გაგზავნა. ეს ფრაგმენტი სრული პროქსი სერვერი არ არის.
გამავალი ბაიტებისთვის შეინარჩუნეთ წარმოდგენის შესაბამისი მეტამონაცემები, როგორიცაა მედიის ტიპი და შიგთავსის კოდირება, ხოლო hop-ისთვის დამახასიათებელი ველები დაამუშავეთ გადაგზავნის წესებით. gzip ბაიტებისა და შესაბამისი პასუხის თავსართების შედარება გვიჩვენებს არჩევანს კოდირებულ და დეკოდირებულ წარმოდგენას შორის.
HTML-ის განზრახ გადაწერა სხვა გზას მოითხოვს: ამოიცანით მედიის ტიპი, დაამუშავეთ შეკუმშვა და სიმბოლოთა ნაკრები, გარდაქმენით ტექსტი და შექმენით მეტამონაცემები ახალი ბაიტებისთვის. ძველი Content-Length ვერ აღწერს შეცვლილ სხეულს.
Buffer.concat შეუძლია ბინარული შიგთავსის შენარჩუნება, როცა სრული ბუფერიზაციაა საჭირო, მაგრამ მთელ სხეულს მეხსიერებაში ინახავს. გამავალ სურათის ნაკადს ეს ხარჯი არ სჭირდება.