我正在尝试使用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
与服务器有什么关系?
答案 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。