Allow Resource to add headers for range requests

Closes gh-25976
This commit is contained in:
Rossen Stoyanchev
2020-10-27 10:15:56 +00:00
parent b6dae6acba
commit d91b66a04c
3 changed files with 38 additions and 7 deletions

View File

@@ -508,22 +508,20 @@ public class ResourceHttpRequestHandler extends WebContentGenerator
// Check the media type for the resource
MediaType mediaType = getMediaType(request, resource);
setHeaders(response, resource, mediaType);
// Content phase
if (METHOD_HEAD.equals(request.getMethod())) {
setHeaders(response, resource, mediaType);
return;
}
ServletServerHttpResponse outputMessage = new ServletServerHttpResponse(response);
if (request.getHeader(HttpHeaders.RANGE) == null) {
Assert.state(this.resourceHttpMessageConverter != null, "Not initialized");
setHeaders(response, resource, mediaType);
this.resourceHttpMessageConverter.write(resource, mediaType, outputMessage);
}
else {
Assert.state(this.resourceRegionHttpMessageConverter != null, "Not initialized");
response.setHeader(HttpHeaders.ACCEPT_RANGES, "bytes");
ServletServerHttpRequest inputMessage = new ServletServerHttpRequest(request);
try {
List<HttpRange> httpRanges = inputMessage.getHeaders().getRange();
@@ -532,7 +530,7 @@ public class ResourceHttpRequestHandler extends WebContentGenerator
HttpRange.toResourceRegions(httpRanges, resource), mediaType, outputMessage);
}
catch (IllegalArgumentException ex) {
response.setHeader("Content-Range", "bytes */" + resource.contentLength());
response.setHeader(HttpHeaders.CONTENT_RANGE, "bytes */" + resource.contentLength());
response.sendError(HttpServletResponse.SC_REQUESTED_RANGE_NOT_SATISFIABLE);
}
}
@@ -750,6 +748,7 @@ public class ResourceHttpRequestHandler extends WebContentGenerator
if (mediaType != null) {
response.setContentType(mediaType.toString());
}
if (resource instanceof HttpResource) {
HttpHeaders resourceHeaders = ((HttpResource) resource).getResponseHeaders();
resourceHeaders.forEach((headerName, headerValues) -> {
@@ -765,6 +764,7 @@ public class ResourceHttpRequestHandler extends WebContentGenerator
}
});
}
response.setHeader(HttpHeaders.ACCEPT_RANGES, "bytes");
}