Поддержка 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
если ты:
- внедрить сервлет 4.0,
- включить
servlet-4.0
особенность и - отправить запрос, используя небезопасный 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.