Я использую Spring Cloud и Zuul proxy в качестве шлюза для моего сервиса RESTful, предоставляемого микросервисом. Когда я выполняю запрос непосредственно к экземпляру микросервиса, все заголовки предоставляются, как я ожидал. Однако, когда тот же запрос проксируется Zuul, заголовок «Content-length» удаляется. Я сделал несколько исследований об этом, и я увидел, что Zuul добавляет заголовок «Transfer-Encoding» как «chunked», и в этом случае заголовок Content-length опущен (Content-Length is being stripped, Spring Cloud Netflix: Whats happening in ZuulConfiguration with the ZuulServlet?).Spring Boot + Zuul: как получить заголовок «Content-length» из файлового потока, предоставляемого службами RESTful?
Однако мне действительно нужно получить «Content-length», предоставляемый моей службой RESTful. Этот запрос также должен быть проксирован Zuul (у меня много экземпляров микросервиса, поэтому я бы не обращался к ним напрямую).
Вот метод в моем microservice:
@RequestMapping(value = "/jobresult/{id}", method = RequestMethod.GET)
@Timed
public ResponseEntity<InputStreamResource> downloadJobResult(@PathVariable Long id) {
Job job = jobService.findOne(id);
File file = new File(job.getTargetFile());
try {
return ResponseEntity.ok().contentLength(file.length()).contentType(MediaType.APPLICATION_OCTET_STREAM).body(new InputStreamResource(new FileInputStream(file)));
} catch (FileNotFoundException e) {
log.error(e.getMessage(), e);
}
}
Например, запрос/API/jobresult/1 обеспечивает заголовок "Content-Length" правильно, но запрос/услуг/API/jobresult/1 (направлено Zuul) не отображает этот заголовок, а также модифицирует «Transfer-Encoding» для «chunked».