Поддержка HTTP/2 на Open Liberty

Поддерживает ли Open Liberty HTTP/2 или нуждается в настройке server.xml? Я осмотрелся вокруг, но ничего не могу найти по этому поводу.

У меня есть пуш-сервлет на данный момент -

public class PushServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        PushBuilder pushBuilder = req.newPushBuilder();
         pushBuilder.path("push.css").push();


        try (PrintWriter respWriter = resp.getWriter();) {
            respWriter.write("<html>" +
                    "<img src='images/kodedu-logo.png'>" +
                    "</html>");
        }

    }
}

И я получаю исключение NullPointerException на newPushBuilder

Я запустил версию Major/Minor, и это подтвердило, что я использую Servlet 4.0 в соответствии с моим pom -

<dependencies>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>8.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

Мой server.xml настроен как -

<!-- To access this server from a remote client add a host attribute to 
    the following element, e.g. host="*" -->
<httpEndpoint httpPort="9080" httpsPort="9443" id="defaultHttpEndpoint" >
   <httpOptions http2="enabled" />
</httpEndpoint>

Также я использую Java9

1 ответ

Вы получаете NullPointerException потому что Push не поддерживается для запроса, с которым вы работаете. Вы должны проверить на ноль перед использованием PushBuilder объект.

Поддержка открытой свободы для HTTP/2 все еще находится в разработке. В самых последних сборках разработки, newPushBuilder() вернет PushBuilder если ты:

  1. внедрить сервлет 4.0,
  2. включить servlet-4.0 особенность и
  3. отправить запрос, используя небезопасный HTTP/2 (h2c) или безопасный HTTP/2 через ALPN (h2)

* Браузеры не поддерживают небезопасный h2c, а ALPN не поддерживается в Java 8. Поэтому для использования ALPN в условиях открытой свободы наилучшим текущим подходом является запуск с JDK из Oracle или openjdk вместе с трюком bootclasspath для включения ALPN. Oracle и Jetty предоставляют jar-файлы bootclasspath - grizzly-npn-bootstrap и alpn-boot - которые при настройке позволяют open-liberty использовать ALPN для согласования безопасного HTTP/2.

Другие вопросы по тегам