Skip to content

Commit 1b99237

Browse files
jansupolsenivam
authored andcommitted
Set correct HOST header for Netty & POST
Signed-off-by: jansupol <[email protected]>
1 parent b231664 commit 1b99237

File tree

2 files changed

+40
-15
lines changed

2 files changed

+40
-15
lines changed

connectors/netty-connector/src/main/java/org/glassfish/jersey/netty/connector/NettyConnector.java

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -415,18 +415,7 @@ protected void initChannel(SocketChannel ch) throws Exception {
415415
// headers
416416
if (!jerseyRequest.hasEntity()) {
417417
setHeaders(jerseyRequest, nettyRequest.headers(), false);
418-
419-
// host header - http 1.1
420-
if (!nettyRequest.headers().contains(HttpHeaderNames.HOST)) {
421-
int requestPort = jerseyRequest.getUri().getPort();
422-
final String hostHeader;
423-
if (requestPort != 80 && requestPort != 443) {
424-
hostHeader = jerseyRequest.getUri().getHost() + ":" + requestPort;
425-
} else {
426-
hostHeader = jerseyRequest.getUri().getHost();
427-
}
428-
nettyRequest.headers().add(HttpHeaderNames.HOST, hostHeader);
429-
}
418+
setHostHeader(jerseyRequest, nettyRequest);
430419
}
431420

432421
if (jerseyRequest.hasEntity()) {
@@ -474,9 +463,7 @@ public void operationComplete(io.netty.util.concurrent.Future<? super Void> futu
474463
@Override
475464
public OutputStream getOutputStream(int contentLength) throws IOException {
476465
replaceHeaders(jerseyRequest, nettyRequest.headers()); // WriterInterceptor changes
477-
if (!nettyRequest.headers().contains(HttpHeaderNames.HOST)) {
478-
nettyRequest.headers().add(HttpHeaderNames.HOST, jerseyRequest.getUri().getHost());
479-
}
466+
setHostHeader(jerseyRequest, nettyRequest);
480467
headersSet.countDown();
481468

482469
return entityWriter.getOutputStream();
@@ -626,4 +613,18 @@ private static HttpHeaders replaceHeaders(ClientRequest jerseyRequest, HttpHeade
626613
private static boolean additionalProxyHeadersToKeep(String key) {
627614
return key.length() > 2 && (key.charAt(0) == 'x' || key.charAt(0) == 'X') && (key.charAt(1) == '-');
628615
}
616+
617+
private static void setHostHeader(ClientRequest jerseyRequest, HttpRequest nettyRequest) {
618+
// host header - http 1.1
619+
if (!nettyRequest.headers().contains(HttpHeaderNames.HOST)) {
620+
int requestPort = jerseyRequest.getUri().getPort();
621+
final String hostHeader;
622+
if (requestPort != 80 && requestPort != 443) {
623+
hostHeader = jerseyRequest.getUri().getHost() + ":" + requestPort;
624+
} else {
625+
hostHeader = jerseyRequest.getUri().getHost();
626+
}
627+
nettyRequest.headers().add(HttpHeaderNames.HOST, hostHeader);
628+
}
629+
}
629630
}

connectors/netty-connector/src/test/java/org/glassfish/jersey/netty/connector/HostHeaderTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,14 @@
2424
import org.junit.jupiter.api.Test;
2525

2626
import javax.ws.rs.GET;
27+
import javax.ws.rs.POST;
2728
import javax.ws.rs.Path;
2829
import javax.ws.rs.client.ClientBuilder;
30+
import javax.ws.rs.client.Entity;
2931
import javax.ws.rs.core.Application;
3032
import javax.ws.rs.core.Context;
3133
import javax.ws.rs.core.HttpHeaders;
34+
import javax.ws.rs.core.MediaType;
3235
import javax.ws.rs.core.Response;
3336

3437
public class HostHeaderTest extends JerseyTest {
@@ -37,6 +40,12 @@ public class HostHeaderTest extends JerseyTest {
3740

3841
@Path("/")
3942
public static class HostHeaderTestEchoResource {
43+
44+
@POST
45+
public String post(@Context HttpHeaders headers) {
46+
return get(headers);
47+
}
48+
4049
@GET
4150
public String get(@Context HttpHeaders headers) {
4251
String sPort = headers.getHeaderString(HTTP_HEADER_NAME);
@@ -72,4 +81,19 @@ public void testHostHeaderAndPort() {
7281
}
7382
}
7483

84+
@Test
85+
public void testHostHeaderAndPortAfterRemovedFromFilter() {
86+
int port = getPort();
87+
ClientConfig config = new ClientConfig();
88+
config.connectorProvider(new NettyConnectorProvider());
89+
try (Response response = ClientBuilder.newClient(config)
90+
.target(target().getUri())
91+
.request()
92+
.header(HTTP_HEADER_NAME, port)
93+
.post(Entity.entity("xxx", MediaType.TEXT_PLAIN_TYPE))) {
94+
MatcherAssert.assertThat(response.getStatus(), Matchers.is(200));
95+
MatcherAssert.assertThat(response.readEntity(String.class), Matchers.is(GET.class.getName()));
96+
}
97+
}
98+
7599
}

0 commit comments

Comments
 (0)