setContentLength가 하이 설정됩니다
-
26-12-2019 - |
문제
setContentLength
메소드가 실제 크기보다 높은 크기로 응답의 길이를 설정하는 데 사용되는 경우 컨테이너가 자동 계산을 자동으로 계산하지 않는 이유는 무엇입니까?
예를 들어,
String s = "hello";
byte[] b = s.getBytes();
response.setContentLength(100);
response.getOutputStream().write(b);
response.flush();
.
서블릿을 누르면 페이지를로드하는 데 약 30 분이 걸리므로 콘텐츠 길이 헤더로 인해이 기능이 있습니다.
그러한 방법의 필요성은 무엇입니까?그 자체로 응답의 길이를 계산하기 위해 컨테이너를 할 수없는 이유는 무엇입니까?
해결책
큰 내용을 반환하려면 TE 전체 응답을로드하고 한 번에 보낼 수 있지만 대신 덩어리로 보냅니다.길이는 응답 시작 부분의 일부로 전송되므로 컨테이너가 나중에 변경할 수있는 방법이 없습니다.
이 경우 응답이 100 바이트라는 컨테이너에 알려 주시면 처음 5 바이트 (헤더를 트리거하는 "컨텐츠 길이 : 100"을 송신하십시오) 이제 수신자가 다른 95 바이트를 기대합니다..
이제는 콘텐츠가 10GB라고 말하면서 먼저 모든 것을 메모리로로드하고 컨테이너가 크기를 계산할 것입니다.
제휴하지 않습니다 StackOverflow