Skip to content

Commit bb4e802

Browse files
committed
Full header support HTTP HEAD Resource requests
Allow the body to be written in order for all headers to be set as they would be on HTTP GET. The body content is ignored as a lower level. See gh-25976
1 parent d91b66a commit bb4e802

File tree

4 files changed

+14
-14
lines changed

4 files changed

+14
-14
lines changed

spring-webflux/src/main/java/org/springframework/web/reactive/resource/ResourceWebHandler.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -355,11 +355,6 @@ public Mono<Void> handle(ServerWebExchange exchange) {
355355
setHeaders(exchange, resource, mediaType);
356356

357357
// Content phase
358-
if (HttpMethod.HEAD.matches(exchange.getRequest().getMethodValue())) {
359-
exchange.getResponse().getHeaders().set(HttpHeaders.ACCEPT_RANGES, "bytes");
360-
return Mono.empty();
361-
}
362-
363358
ResourceHttpMessageWriter writer = getResourceHttpMessageWriter();
364359
Assert.state(writer != null, "No ResourceHttpMessageWriter");
365360
return writer.write(Mono.just(resource),

spring-webflux/src/test/java/org/springframework/web/reactive/resource/ResourceWebHandlerTests.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,10 +123,6 @@ public void getResourceHttpHeader() throws Exception {
123123
assertThat(resourceLastModifiedDate("test/foo.css") / 1000).isEqualTo(headers.getLastModified() / 1000);
124124
assertThat(headers.getFirst("Accept-Ranges")).isEqualTo("bytes");
125125
assertThat(headers.get("Accept-Ranges").size()).isEqualTo(1);
126-
127-
StepVerifier.create(exchange.getResponse().getBody())
128-
.expectErrorMatches(ex -> ex.getMessage().startsWith("No content was written"))
129-
.verify();
130126
}
131127

132128
@Test

spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -511,10 +511,6 @@ public void handleRequest(HttpServletRequest request, HttpServletResponse respon
511511
setHeaders(response, resource, mediaType);
512512

513513
// Content phase
514-
if (METHOD_HEAD.equals(request.getMethod())) {
515-
return;
516-
}
517-
518514
ServletServerHttpResponse outputMessage = new ServletServerHttpResponse(response);
519515
if (request.getHeader(HttpHeaders.RANGE) == null) {
520516
Assert.state(this.resourceHttpMessageConverter != null, "Not initialized");

spring-webmvc/src/test/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandlerTests.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,6 @@ public void getResourceHttpHeader() throws Exception {
118118
assertThat(this.response.getDateHeader("Last-Modified") / 1000).isEqualTo(resourceLastModified("test/foo.css") / 1000);
119119
assertThat(this.response.getHeader("Accept-Ranges")).isEqualTo("bytes");
120120
assertThat(this.response.getHeaders("Accept-Ranges").size()).isEqualTo(1);
121-
assertThat(this.response.getContentAsByteArray().length).isEqualTo(0);
122121
}
123122

124123
@Test
@@ -686,6 +685,20 @@ public void partialContentByteRangeWithEncodedResource(GzipSupport.GzippedFiles
686685
assertThat(this.response.getHeaderValues("Vary")).containsExactly("Accept-Encoding");
687686
}
688687

688+
@Test // gh-25976
689+
public void partialContentWithHttpHead() throws Exception {
690+
this.request.setMethod("HEAD");
691+
this.request.addHeader("Range", "bytes=0-1");
692+
this.request.setAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, "foo.txt");
693+
this.handler.handleRequest(this.request, this.response);
694+
695+
assertThat(this.response.getStatus()).isEqualTo(206);
696+
assertThat(this.response.getContentType()).isEqualTo("text/plain");
697+
assertThat(this.response.getContentLength()).isEqualTo(2);
698+
assertThat(this.response.getHeader("Content-Range")).isEqualTo("bytes 0-1/10");
699+
assertThat(this.response.getHeaderValues("Accept-Ranges")).containsExactly("bytes");
700+
}
701+
689702
@Test // SPR-14005
690703
public void doOverwriteExistingCacheControlHeaders() throws Exception {
691704
this.request.setAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, "foo.css");

0 commit comments

Comments
 (0)