ADDITIONAL SYSTEM INFORMATION :
Debian Linux testing, 4.15.7 kernel.
openjdk 11 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
A DESCRIPTION OF THE PROBLEM :
Host header is used in virtual host environments and it is important to be able to customize it.
Right now following code fails:
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http://127.0.0.1:8081/"))
.header("Host", "test.example.com")
.build();
client.send(request, HttpResponse.BodyHandler.asString());
With exception: java.lang.IllegalArgumentException: restricted header name: "Host"
(In JDK 10, it doesn't fail but sends two Host headers, one from URI and the second one from requested).
This should not be the case.
Host header should be customizable (like in other http client libraries - sometimes it is called virtualHost), and should override the one that exists in the URI.
Reported on SO:
https://stackoverflow.com/questions/52315472/how-to-customise-host-header-in-java-http-client