Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import java.net.Authenticator;
import java.net.http.HttpClient;
import java.net.http.HttpClient.Redirect;
import java.net.http.HttpClient.Version;
import java.net.http.HttpRequest;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
Expand All @@ -37,6 +38,8 @@
@SuppressWarnings({ "restriction" })
@Component
public class ECFHttpClientFactory implements IHttpClientFactory {
private static final Runtime.Version JDK_BUG_8335181_JAVA21 = Runtime.Version.parse("21.0.8");
private static final Runtime.Version JDK_BUG_8335181_JAVA17 = Runtime.Version.parse("17.0.17");
@SuppressWarnings("unused")
private static final List<String> DEFAULT_PREFERRED_AUTH_SCHEMES_NO_NTLM = Arrays.asList("Basic","Digest");
@SuppressWarnings("unused")
Expand All @@ -51,7 +54,7 @@ public class ECFHttpClientFactory implements IHttpClientFactory {

@Override
public HttpClient.Builder newClient() {
HttpClient.Builder builder = HttpClient.newBuilder().followRedirects(Redirect.NORMAL);
HttpClient.Builder builder = HttpClient.newBuilder().version(getDefaultHttpVersion()).followRedirects(Redirect.NORMAL);
String sslContextProvider = HttpClientOptions.HTTPCLIENT_SSLCONTEXT_PROVIDER;
String sslContextProtocol = HttpClientOptions.HTTPCLIENT_SSLCONTEXT_PROTOCOL;
SSLContextFactory sslContextFactory = Activator.getDefault().getSSLContextFactory();
Expand Down Expand Up @@ -82,6 +85,24 @@ public HttpClient.Builder run(IHttpClientModifier modifier, HttpClient.Builder v
return builder;
}

private Version getDefaultHttpVersion() {
// See https://bugs.openjdk.org/browse/JDK-8335181
// Version with this bug are prone to spurious GOAWAY
// So we check here if it is safe to use HTTP/2
var version = Runtime.version();
int feature = version.feature();
if (feature >= 25) {
return Version.HTTP_2;
}
if (feature == 17 && version.compareTo(JDK_BUG_8335181_JAVA17) >= 0) {
return Version.HTTP_2;
}
if (feature == 21 && version.compareTo(JDK_BUG_8335181_JAVA21) >= 0) {
return Version.HTTP_2;
}
return Version.HTTP_1_1;
}

@Override
public IHttpClientContext newClientContext() {
IHttpClientContext context = new IHttpClientContext() {
Expand Down