문제

setContentLength 메소드가 실제 크기보다 높은 크기로 응답의 길이를 설정하는 데 사용되는 경우 컨테이너가 자동 계산을 자동으로 계산하지 않는 이유는 무엇입니까?

예를 들어,

String s = "hello";
byte[] b = s.getBytes();

response.setContentLength(100);
response.getOutputStream().write(b);
response.flush();
.

서블릿을 누르면 페이지를로드하는 데 약 30 분이 걸리므로 콘텐츠 길이 헤더로 인해이 기능이 있습니다.

그러한 방법의 필요성은 무엇입니까?그 자체로 응답의 길이를 계산하기 위해 컨테이너를 할 수없는 이유는 무엇입니까?

도움이 되었습니까?

해결책

큰 내용을 반환하려면 TE 전체 응답을로드하고 한 번에 보낼 수 있지만 대신 덩어리로 보냅니다.길이는 응답 시작 부분의 일부로 전송되므로 컨테이너가 나중에 변경할 수있는 방법이 없습니다.

이 경우 응답이 100 바이트라는 컨테이너에 알려 주시면 처음 5 바이트 (헤더를 트리거하는 "컨텐츠 길이 : 100"을 송신하십시오) 이제 수신자가 다른 95 바이트를 기대합니다..

이제는 콘텐츠가 10GB라고 말하면서 먼저 모든 것을 메모리로로드하고 컨테이너가 크기를 계산할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top