Jetty的HTTP / 2问题 - 前言

时间:2017-05-29 13:31:10

标签: java curl jetty http2

我正在尝试使用HTTP / 2。我在this repo中找到了一些例子。这是构造函数(跳过样板代码):

public WebServer(String path, HttpServlet servlet, int port) {
    Server server = new Server(new QueuedThreadPool());
    ServletContextHandler context = new ServletContextHandler(server, "/", ServletContextHandler.SESSIONS);
    context.addServlet(new ServletHolder(servlet), path);
    ServerConnector connector = new ServerConnector(server, 1,1, new HTTP2ServerConnectionFactory(new HttpConfiguration()));
    connector.setPort(port);
    server.addConnector(connector);
}

然后我start()服务器,从上面提到的repo运行java http2客户端,它连接没有错误。但后来我尝试用curl做同样的事情:

# curl --http2 http://localhost:8080
invalid_preface

浏览器(Chrome)说:

GET http://localhost:8080/ net::ERR_INVALID_HTTP_RESPONSE

与服务器有什么关系?

1 个答案:

答案 0 :(得分:3)

服务器没有问题。

您已将Jetty配置为仅侦听HTTP / 2(无HTTP / 1.1),然后您已要求curl和Chrome发出HTTP / 1.1请求,Jetty回复了invalid_preface因为它无法理解它。

请记住,浏览器只会通过TLS(即SSL)说HTTP / 2,而curl也可以说明文HTTP / 2.

This example向您展示如何设置支持明文HTTP / 1.1和HTTP / 2的服务器。

This example向您展示如何设置支持明文和TLS HTTP / 1.1和HTTP / 2的服务器。

有关如何将curl与HTTP / 2一起使用,请参阅here