Do not cache Content-Type in ContentCachingResponseWrapper
Based on feedback from several members of the community, we have
decided to revert the caching of the Content-Type header that was
introduced in ContentCachingResponseWrapper in 375e0e6827.
This commit therefore completely removes Content-Type caching in
ContentCachingResponseWrapper and updates the existing tests
accordingly.
To provide guards against future regressions in this area, this commit
also introduces explicit tests for the 6 ways to set the content length
in ContentCachingResponseWrapper and modifies a test in
ShallowEtagHeaderFilterTests to ensure that a Content-Type header set
directly on ContentCachingResponseWrapper is propagated to the
underlying response even if content caching is disabled for the
ShallowEtagHeaderFilter.
See gh-32039
Closes gh-32317
This commit is contained in:
@@ -60,9 +60,6 @@ public class ContentCachingResponseWrapper extends HttpServletResponseWrapper {
|
||||
@Nullable
|
||||
private Integer contentLength;
|
||||
|
||||
@Nullable
|
||||
private String contentType;
|
||||
|
||||
|
||||
/**
|
||||
* Create a new ContentCachingResponseWrapper for the given servlet response.
|
||||
@@ -150,28 +147,11 @@ public class ContentCachingResponseWrapper extends HttpServletResponseWrapper {
|
||||
setContentLength((int) len);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setContentType(@Nullable String type) {
|
||||
this.contentType = type;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public String getContentType() {
|
||||
if (this.contentType != null) {
|
||||
return this.contentType;
|
||||
}
|
||||
return super.getContentType();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsHeader(String name) {
|
||||
if (this.contentLength != null && HttpHeaders.CONTENT_LENGTH.equalsIgnoreCase(name)) {
|
||||
return true;
|
||||
}
|
||||
else if (this.contentType != null && HttpHeaders.CONTENT_TYPE.equalsIgnoreCase(name)) {
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return super.containsHeader(name);
|
||||
}
|
||||
@@ -182,9 +162,6 @@ public class ContentCachingResponseWrapper extends HttpServletResponseWrapper {
|
||||
if (HttpHeaders.CONTENT_LENGTH.equalsIgnoreCase(name)) {
|
||||
this.contentLength = Integer.valueOf(value);
|
||||
}
|
||||
else if (HttpHeaders.CONTENT_TYPE.equalsIgnoreCase(name)) {
|
||||
this.contentType = value;
|
||||
}
|
||||
else {
|
||||
super.setHeader(name, value);
|
||||
}
|
||||
@@ -195,9 +172,6 @@ public class ContentCachingResponseWrapper extends HttpServletResponseWrapper {
|
||||
if (HttpHeaders.CONTENT_LENGTH.equalsIgnoreCase(name)) {
|
||||
this.contentLength = Integer.valueOf(value);
|
||||
}
|
||||
else if (HttpHeaders.CONTENT_TYPE.equalsIgnoreCase(name)) {
|
||||
this.contentType = value;
|
||||
}
|
||||
else {
|
||||
super.addHeader(name, value);
|
||||
}
|
||||
@@ -229,9 +203,6 @@ public class ContentCachingResponseWrapper extends HttpServletResponseWrapper {
|
||||
if (this.contentLength != null && HttpHeaders.CONTENT_LENGTH.equalsIgnoreCase(name)) {
|
||||
return this.contentLength.toString();
|
||||
}
|
||||
else if (this.contentType != null && HttpHeaders.CONTENT_TYPE.equalsIgnoreCase(name)) {
|
||||
return this.contentType;
|
||||
}
|
||||
else {
|
||||
return super.getHeader(name);
|
||||
}
|
||||
@@ -242,9 +213,6 @@ public class ContentCachingResponseWrapper extends HttpServletResponseWrapper {
|
||||
if (this.contentLength != null && HttpHeaders.CONTENT_LENGTH.equalsIgnoreCase(name)) {
|
||||
return Collections.singleton(this.contentLength.toString());
|
||||
}
|
||||
else if (this.contentType != null && HttpHeaders.CONTENT_TYPE.equalsIgnoreCase(name)) {
|
||||
return Collections.singleton(this.contentType);
|
||||
}
|
||||
else {
|
||||
return super.getHeaders(name);
|
||||
}
|
||||
@@ -253,14 +221,9 @@ public class ContentCachingResponseWrapper extends HttpServletResponseWrapper {
|
||||
@Override
|
||||
public Collection<String> getHeaderNames() {
|
||||
Collection<String> headerNames = super.getHeaderNames();
|
||||
if (this.contentLength != null || this.contentType != null) {
|
||||
if (this.contentLength != null) {
|
||||
Set<String> result = new LinkedHashSet<>(headerNames);
|
||||
if (this.contentLength != null) {
|
||||
result.add(HttpHeaders.CONTENT_LENGTH);
|
||||
}
|
||||
if (this.contentType != null) {
|
||||
result.add(HttpHeaders.CONTENT_TYPE);
|
||||
}
|
||||
result.add(HttpHeaders.CONTENT_LENGTH);
|
||||
return result;
|
||||
}
|
||||
else {
|
||||
@@ -333,10 +296,6 @@ public class ContentCachingResponseWrapper extends HttpServletResponseWrapper {
|
||||
}
|
||||
this.contentLength = null;
|
||||
}
|
||||
if (this.contentType != null) {
|
||||
rawResponse.setContentType(this.contentType);
|
||||
this.contentType = null;
|
||||
}
|
||||
}
|
||||
this.content.writeTo(rawResponse.getOutputStream());
|
||||
this.content.reset();
|
||||
|
||||
Reference in New Issue
Block a user