检查是否支持 ALPN

Check if ALPN is supported

我正在评估 Jetty alpn-boot 的 OpenJDK 8 以添加对 ALPN 的支持(和 HTTP/2)。但是,问题是 jar 文件必须放在引导类路径中,我不能确保它在所有环境中始终存在于 webapp(例如,客户的服务器)。

所以我需要一个后备机制,例如:

if (isAlpnSupported()) {
    /* use HTTP/2 protocol */
} else {
    /* fallback legacy code */
}

我可以在不实际连接到 HTTP/2 服务器的情况下检查是否支持 ALPN 吗?

检查 ALPN 是否存在是对 class:

是否存在的简单检查
boolean isALPNPresent() {
    try {
        ClassLoader.getSystemClassLoader().loadClass("org.eclipse.jetty.alpn.ALPN");
        return true;
    } catch (Throwable x) {
        return false;
    }
}

这仅在您的 Web 应用程序向同时支持 HTTP/1.1 和 HTTP/2.

的另一台服务器执行 HTTP 请求时才有用

通过此检查,您可以在 Web 应用程序中配置 HTTP 客户端,以使用正确的协议执行请求。