我正在试验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 一起使用的信息,请参阅此处。