Closed
Description
Alfred Thomas opened SPR-17633 and commented
According to the Javadoc, HttpHeaders.EMPTY is immutable.
I found that by using the following code, headers could be added to HttpHeaders.EMPTY.
From then on, any further calls will result in a non-empty HttpHeaders.
HttpHeaders myHeaders = HttpHeaders.writableHttpHeaders(HttpHeaders.EMPTY);
my.add(HttpHeaders.ACCEPT_ENCODING, "gzip");
I have written a simple unit test to explain this issue:
@Test
public void testUpdateEmptyHeaders() {
assertEquals(0, HttpHeaders.EMPTY.size()); // **Success**
HttpHeaders myHeaders = HttpHeaders.writableHttpHeaders(HttpHeaders.EMPTY);
myHeaders.add(HttpHeaders.ACCEPT_ENCODING, "gzip");
assertEquals(0, HttpHeaders.EMPTY.size()); // **Assert Fails**
}
This caused a bug in my code where I subsequently used HttpHeaders.EMPTY again to create a new writable HttpHeaders object. I then unknowingly introduced headers used in the previous object
Affects: 5.1.3
Reference URL: https://stackoverflow.com/questions/53982635/possible-bug-in-spring-httpheaders
Issue Links:
- Improve WebFlux performance for header management [SPR-17250] #21783 Improve WebFlux performance for header management
Referenced from: commits 6e3f974