프록시 요청 사이에서 HttpWebRequest 응답을 폐기하세요
레거시 HttpWebRequest 응답에 명확한 수명을 부여하여 반복되는 프록시 요청이 연결 리소스를 무한정 붙잡지 않게 하세요.
using (WebResponse response = request.GetResponse())
{
response.GetResponseStream().CopyTo(destination);
}
레거시 HttpWebRequest 응답을 각각 소비를 마치고 해제하는 범위 안에 두세요. 여기서 destination 은 애플리케이션의 쓰기 가능한 출력 스트림입니다. using 블록은 복사가 실패하더라도 WebResponse를 해제하며, 그 출력의 소유권을 넘겨받지 않습니다.
프록시 요청 하나가 성공하고 이후 요청이 대기한다면 완료되지 않은 응답이 연결 리소스를 점유하고 있음을 뜻할 수 있습니다. WebResponse를 받기만 해서는 본문이 끝나지 않습니다. 요청 시간 제한은 대기를 제한할 뿐, 이미 얻은 모든 응답의 수명을 제한하지 않습니다.
오류에도 같은 소유권을 적용하세요. WebException은 코드가 검사하는 응답을 담을 수 있습니다. 검사 후에는 닫으세요. 전송 실패에는 응답이 전혀 없을 수도 있습니다.
폐기는 응답의 리소스를 돌려주지만 모든 경우에 재사용 가능한 연결을 보장하지는 않습니다. 프로토콜, 서버, 본문 소비는 여전히 중요합니다.
이는 레거시 WebRequest 스택 유지 관리에 관한 것입니다. 최신 코드에서는 실제 클라이언트의 응답/스트림 소유권을 따르세요. HttpClient의 경우 응답을 해당 폐기 범위 안에 유지하고, 이 정리 실패를 프록시 인증이나 경로 선택과 구분하세요.