Skip to content

Commit

Permalink
Fixes #8750 - AbstractProxyServlet.onServerResponseHeaders does not s…
Browse files Browse the repository at this point in the history
…upport headers with empty values (#8904)

Fixed support for empty headers.
Added test case.

Signed-off-by: Simone Bordet <[email protected]>
  • Loading branch information
sbordet authored Nov 16, 2022
1 parent df265e0 commit 3569f65
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -663,7 +663,7 @@ protected void onServerResponseHeaders(HttpServletRequest clientRequest, HttpSer
continue;

String newHeaderValue = filterServerResponseHeader(clientRequest, serverResponse, headerName, field.getValue());
if (newHeaderValue == null || newHeaderValue.trim().length() == 0)
if (newHeaderValue == null)
continue;

proxyResponse.addHeader(headerName, newHeaderValue);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -999,6 +999,36 @@ protected void doGet(HttpServletRequest req, HttpServletResponse resp)
assertTrue(response.getHeaders().contains(PROXIED_HEADER));
}

@ParameterizedTest
@MethodSource("transparentImpls")
public void testTransparentProxyEmptyHeaderValue(AbstractProxyServlet proxyServletClass) throws Exception
{
String emptyHeaderName = "X-Empty";
startServer(new EmptyHttpServlet()
{
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
{
assertEquals("", request.getHeader(emptyHeaderName));
response.setHeader(emptyHeaderName, "");
}
});
String proxyTo = "http://localhost:" + serverConnector.getLocalPort();
Map<String, String> initParams = new HashMap<>();
initParams.put("proxyTo", proxyTo);
startProxy(proxyServletClass, initParams);
startClient();

// Make the request to the proxy, it should transparently forward to the server.
ContentResponse response = client.newRequest("localhost", proxyConnector.getLocalPort())
.headers(headers -> headers.put(emptyHeaderName, ""))
.timeout(5, TimeUnit.SECONDS)
.send();

assertEquals(200, response.getStatus());
assertEquals("", response.getHeaders().get(emptyHeaderName));
}

/**
* Only tests overridden ProxyServlet behavior, see CachingProxyServlet
*/
Expand Down

0 comments on commit 3569f65

Please sign in to comment.