Jetty 的 HTTP/2 问题 - 无效的前言



我正在试验HTTP/2。我在这个存储库中找到了一些例子。下面是构造函数(跳过样板代码(:

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()服务器,从上述存储库运行java http2客户端,它连接没有错误。但是后来我尝试对 curl 做同样的事情:

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

浏览器(铬(说:

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

服务器是怎么回事?

服务器没有任何问题。

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

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

此示例演示如何设置同时支持明文 HTTP/1.1 和 HTTP/2 的服务器。

此示例演示如何设置同时支持明文和 TLS HTTP/1.1 和 HTTP/2 的服务器。

有关如何将curl与 HTTP/2 一起使用的信息,请参阅此处。

最新更新