Polish byte-range resource handling
This commit is contained in:
@@ -54,7 +54,6 @@ import org.springframework.web.reactive.HandlerMapping;
|
||||
import org.springframework.web.reactive.accept.CompositeContentTypeResolver;
|
||||
import org.springframework.web.reactive.accept.PathExtensionContentTypeResolver;
|
||||
import org.springframework.web.server.MethodNotAllowedException;
|
||||
import org.springframework.web.server.ResponseStatusException;
|
||||
import org.springframework.web.server.ServerWebExchange;
|
||||
import org.springframework.web.server.WebHandler;
|
||||
|
||||
@@ -331,6 +330,7 @@ public class ResourceWebHandler
|
||||
// Content phase
|
||||
if (HttpMethod.HEAD.equals(exchange.getRequest().getMethod())) {
|
||||
setHeaders(exchange, resource, mediaType);
|
||||
exchange.getResponse().getHeaders().set(HttpHeaders.ACCEPT_RANGES, "bytes");
|
||||
logger.trace("HEAD request - skipping content");
|
||||
return Mono.empty();
|
||||
}
|
||||
@@ -340,7 +340,7 @@ public class ResourceWebHandler
|
||||
null, ResolvableType.forClass(Resource.class), mediaType,
|
||||
exchange.getRequest(), exchange.getResponse(), Collections.emptyMap());
|
||||
}
|
||||
catch (IOException|ResponseStatusException ex) {
|
||||
catch (IOException ex) {
|
||||
return Mono.error(ex);
|
||||
}
|
||||
});
|
||||
@@ -503,7 +503,6 @@ public class ResourceWebHandler
|
||||
HttpHeaders resourceHeaders = ((HttpResource) resource).getResponseHeaders();
|
||||
exchange.getResponse().getHeaders().putAll(resourceHeaders);
|
||||
}
|
||||
headers.set(HttpHeaders.ACCEPT_RANGES, "bytes");
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -525,10 +525,10 @@ public class ResourceWebHandlerTests {
|
||||
this.request.addHeader("Range", "bytes= foo bar");
|
||||
this.exchange.getAttributes().put(PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, "foo.txt");
|
||||
|
||||
TestSubscriber.subscribe(this.handler.handle(this.exchange))
|
||||
.assertErrorWith(throwable -> {
|
||||
assertThat(throwable, instanceOf(IllegalArgumentException.class));
|
||||
});
|
||||
TestSubscriber.subscribe(this.handler.handle(this.exchange)).assertComplete();
|
||||
|
||||
assertEquals(HttpStatus.REQUESTED_RANGE_NOT_SATISFIABLE, this.response.getStatusCode());
|
||||
assertEquals("bytes", this.response.getHeaders().getFirst("Accept-Ranges"));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user