Сообщение Re[6]: Как в Spring Boot включить Content-Length в ответ? от 06.05.2022 18:46
Изменено 06.05.2022 18:47 vsb
Re[6]: Как в Spring Boot включить Content-Length в ответ?
Это не совсем правильный ответ. Во-первых Spring работает не так. Если он может вычислить длину ответа, он его вычисляет и проставляет Content-Length. Например если контролер отдаёт строку, то спринг корректно вычислит Content-Length, хоть мегабайт отдавай. Если он не может вычислить, то он действительно просто пишет в ServletOutputStream. И при этом Jetty ничего не вычисляет ни при какой ситуации. Вот пример кода и как он работает:
@RestController
public class TestController {
@JsonInclude(NON_NULL)
public static class Test1Response {
private String s;
}
@GetMapping("/test1")
public ResponseEntity<?> getTest1() {
return ResponseEntity.ok(new Test1Response());
}
@GetMapping("/test2")
public String getTest2() {
return Strings.repeat("1", 1024 * 1024 * 1024);
}
}
% curl -v http://127.0.0.1:8080/test1 > GET /test1 HTTP/1.1
> Host: 127.0.0.1:8080
> User-Agent: curl/7.79.1
> Accept: */*
>
< HTTP/1.1 200
< Content-Type: application/json
< Transfer-Encoding: chunked
< Date: Fri, 06 May 2022 18:44:03 GMT
<
{} % curl -v http://127.0.0.1:8080/test2 >/dev/null
> GET /test2 HTTP/1.1
> Host: 127.0.0.1:8080
> User-Agent: curl/7.79.1
> Accept: */*
>
< HTTP/1.1 200
< Content-Type: text/plain;charset=UTF-8
< Content-Length: 1073741824
< Date: Fri, 06 May 2022 18:44:16 GMT
<
Re[6]: Как в Spring Boot включить Content-Length в ответ?
Это не совсем правильный ответ. Во-первых Spring работает не так. Если он может вычислить длину ответа, он его вычисляет и проставляет Content-Length. Например если контролер отдаёт строку, то спринг корректно вычислит Content-Length, хоть гигабайт отдавай. Если он не может вычислить, то он действительно просто пишет в ServletOutputStream. И при этом Jetty ничего не вычисляет ни при какой ситуации. Вот пример кода и как он работает:
@RestController
public class TestController {
@JsonInclude(NON_NULL)
public static class Test1Response {
private String s;
}
@GetMapping("/test1")
public ResponseEntity<?> getTest1() {
return ResponseEntity.ok(new Test1Response());
}
@GetMapping("/test2")
public String getTest2() {
return Strings.repeat("1", 1024 * 1024 * 1024);
}
}
% curl -v http://127.0.0.1:8080/test1
> GET /test1 HTTP/1.1
> Host: 127.0.0.1:8080
> User-Agent: curl/7.79.1
> Accept: */*
>
< HTTP/1.1 200
< Content-Type: application/json
< Transfer-Encoding: chunked
< Date: Fri, 06 May 2022 18:44:03 GMT
<
{}
% curl -v http://127.0.0.1:8080/test2 >/dev/null
> GET /test2 HTTP/1.1
> Host: 127.0.0.1:8080
> User-Agent: curl/7.79.1
> Accept: */*
>
< HTTP/1.1 200
< Content-Type: text/plain;charset=UTF-8
< Content-Length: 1073741824
< Date: Fri, 06 May 2022 18:44:16 GMT
<