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 는 전체 버퍼링이 필요할 때 바이너리 콘텐츠를 보존할 수 있지만 본문 전체를 메모리에 보관합니다. 통과하는 이미지 스트림에는 그 비용이 필요 없습니다.

관련 글