Skip to content

Commit 8549c78

Browse files
committed
Only use HTTP/2 on certain java versions
Currently we use HTTP/2 as a default but this produces problems with GOAWAY from servers breaking the download on some buggy JDKs. For now we disable HTTP/2 on these unsave versions and only enable it for those where the bug is fixed.
1 parent ac1c442 commit 8549c78

File tree

1 file changed

+20
-1
lines changed
  • providers/bundles/org.eclipse.ecf.provider.filetransfer.httpclientjava/src/org/eclipse/ecf/internal/provider/filetransfer/httpclientjava

1 file changed

+20
-1
lines changed

providers/bundles/org.eclipse.ecf.provider.filetransfer.httpclientjava/src/org/eclipse/ecf/internal/provider/filetransfer/httpclientjava/ECFHttpClientFactory.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import java.net.Authenticator;
1717
import java.net.http.HttpClient;
1818
import java.net.http.HttpClient.Redirect;
19+
import java.net.http.HttpClient.Version;
1920
import java.net.http.HttpRequest;
2021
import java.security.NoSuchAlgorithmException;
2122
import java.security.NoSuchProviderException;
@@ -51,7 +52,7 @@ public class ECFHttpClientFactory implements IHttpClientFactory {
5152

5253
@Override
5354
public HttpClient.Builder newClient() {
54-
HttpClient.Builder builder = HttpClient.newBuilder().followRedirects(Redirect.NORMAL);
55+
HttpClient.Builder builder = HttpClient.newBuilder().version(getDefaultHttpVersion()).followRedirects(Redirect.NORMAL);
5556
String sslContextProvider = HttpClientOptions.HTTPCLIENT_SSLCONTEXT_PROVIDER;
5657
String sslContextProtocol = HttpClientOptions.HTTPCLIENT_SSLCONTEXT_PROTOCOL;
5758
SSLContextFactory sslContextFactory = Activator.getDefault().getSSLContextFactory();
@@ -82,6 +83,24 @@ public HttpClient.Builder run(IHttpClientModifier modifier, HttpClient.Builder v
8283
return builder;
8384
}
8485

86+
private Version getDefaultHttpVersion() {
87+
// See https://bugs.openjdk.org/browse/JDK-8335181
88+
// Version with this bug are prone to spurious GOAWAY
89+
// So we check here if it is safe to use HTTP/2
90+
var version = Runtime.version();
91+
int feature = version.feature();
92+
if (feature >= 25) {
93+
return Version.HTTP_2;
94+
}
95+
if (feature == 17 && version.compareTo(java.lang.Runtime.Version.parse("17.0.17")) >= 0) {
96+
return Version.HTTP_2;
97+
}
98+
if (feature == 21 && version.compareTo(java.lang.Runtime.Version.parse("21.0.8")) >= 0) {
99+
return Version.HTTP_2;
100+
}
101+
return Version.HTTP_1_1;
102+
}
103+
85104
@Override
86105
public IHttpClientContext newClientContext() {
87106
IHttpClientContext context = new IHttpClientContext() {

0 commit comments

Comments
 (0)