マイクロサービスが提供するRESTfulサービスへのゲートウェイとしてSpring CloudとZuulプロキシを使用しています。私がマイクロサービスのインスタンスに直接リクエストを実行すると、すべてのヘッダーが私が期待どおりに提供されます。しかし、同じリクエストがZuulによってプロキシされると、ヘッダ "Content-length"は削除されます。私はそれについていくつかの調査を行いました。Zuulはヘッダー "Transfer-Encoding"を "チャンク"として追加し、この場合Content-lengthヘッダーは省略されています(Content-Length is being stripped、Spring Cloud Netflix: Whats happening in ZuulConfiguration with the ZuulServlet?)。Spring Boot + Zuul:RESTfulサービスが提供するファイルストリームから「Content-length」ヘッダーを取得する方法は?
しかし、私は本当に私のRESTfulサービスによって提供される "Content-length"を取得する必要があります。このリクエストは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"に変更します。