Skip to content

Commit b0726ff

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 f02a2be commit b0726ff

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
@@ -121,10 +121,6 @@ public void getResourceHttpHeader() throws Exception {
121121
assertEquals(headers.getLastModified() / 1000, resourceLastModifiedDate("test/foo.css") / 1000);
122122
assertEquals("bytes", headers.getFirst("Accept-Ranges"));
123123
assertEquals(1, headers.get("Accept-Ranges").size());
124-
125-
StepVerifier.create(exchange.getResponse().getBody())
126-
.expectErrorMatches(ex -> ex.getMessage().startsWith("No content was written"))
127-
.verify();
128124
}
129125

130126
@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
@@ -478,10 +478,6 @@ public void handleRequest(HttpServletRequest request, HttpServletResponse respon
478478
setHeaders(response, resource, mediaType);
479479

480480
// Content phase
481-
if (METHOD_HEAD.equals(request.getMethod())) {
482-
return;
483-
}
484-
485481
ServletServerHttpResponse outputMessage = new ServletServerHttpResponse(response);
486482
if (request.getHeader(HttpHeaders.RANGE) == null) {
487483
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
@@ -111,7 +111,6 @@ public void getResourceHttpHeader() throws Exception {
111111
assertEquals(resourceLastModified("test/foo.css") / 1000, this.response.getDateHeader("Last-Modified") / 1000);
112112
assertEquals("bytes", this.response.getHeader("Accept-Ranges"));
113113
assertEquals(1, this.response.getHeaders("Accept-Ranges").size());
114-
assertEquals(0, this.response.getContentAsByteArray().length);
115114
}
116115

117116
@Test
@@ -680,6 +679,20 @@ public void partialContentByteRangeWithEncodedResource() throws Exception {
680679
assertEquals("Accept-Encoding", this.response.getHeaderValue("Vary"));
681680
}
682681

682+
@Test // gh-25976
683+
public void partialContentWithHttpHead() throws Exception {
684+
this.request.setMethod("HEAD");
685+
this.request.addHeader("Range", "bytes=0-1");
686+
this.request.setAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, "foo.txt");
687+
this.handler.handleRequest(this.request, this.response);
688+
689+
assertEquals(206, this.response.getStatus());
690+
assertEquals("text/plain", this.response.getContentType());
691+
assertEquals(2, this.response.getContentLength());
692+
assertEquals("bytes 0-1/10", this.response.getHeader("Content-Range"));
693+
assertEquals("bytes", this.response.getHeaderValue("Accept-Ranges"));
694+
}
695+
683696
@Test // SPR-14005
684697
public void doOverwriteExistingCacheControlHeaders() throws Exception {
685698
this.request.setAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, "foo.css");

0 commit comments

Comments
 (0)