diff --git a/spring-web/src/main/java/org/springframework/http/HttpHeaders.java b/spring-web/src/main/java/org/springframework/http/HttpHeaders.java index 4756017d36..ca4954d13b 100644 --- a/spring-web/src/main/java/org/springframework/http/HttpHeaders.java +++ b/spring-web/src/main/java/org/springframework/http/HttpHeaders.java @@ -1617,4 +1617,17 @@ public class HttpHeaders implements MultiValueMap, Serializable } } + /** + * Return a {@code HttpHeaders} object that can read and written to. + */ + public static HttpHeaders writableHttpHeaders(HttpHeaders headers) { + Assert.notNull(headers, "HttpHeaders must not be null"); + if (headers instanceof ReadOnlyHttpHeaders) { + return new HttpHeaders(headers.headers); + } + else { + return headers; + } + } + } diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/DefaultServerHttpRequestBuilder.java b/spring-web/src/main/java/org/springframework/http/server/reactive/DefaultServerHttpRequestBuilder.java index 66c38439db..6d5b670d32 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/DefaultServerHttpRequestBuilder.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/DefaultServerHttpRequestBuilder.java @@ -72,8 +72,7 @@ class DefaultServerHttpRequestBuilder implements ServerHttpRequest.Builder { this.httpMethodValue = original.getMethodValue(); this.body = original.getBody(); - this.httpHeaders = new HttpHeaders(); - copyMultiValueMap(original.getHeaders(), this.httpHeaders); + this.httpHeaders = HttpHeaders.writableHttpHeaders(original.getHeaders()); this.cookies = new LinkedMultiValueMap<>(original.getCookies().size()); copyMultiValueMap(original.getCookies(), this.cookies);