HTTP/2 在 Java 中响应 Header
HTTP/2 Response Header in Java
是否已经有办法在 Java 中获得 HTTP/2 响应 header?我尝试在一些库中搜索,例如 URLConnection、Undertow 甚至 Jetty,但都没有成功。
P.S.: 我在我的 Java 项目上使用 JDK 1.7。
另外,HTTP/2的回复header是这样的?
GET / HTTP/1.1
Host: server.example.com
Connection: Upgrade, HTTP2-Settings
Upgrade: h2c
HTTP2-Settings: <base64url encoding of HTTP/2 SETTINGS payload>
有没有已经在使用这个版本的网站?
我的主要目标是知道网站是否使用 HTTP/2 版本,有没有办法知道这一点而无需阅读 Java 中的响应 header项目?
谢谢。
HTTP/2 网站通常使用 TLS,因为浏览器仅支持 HTTP/2 over TLS。
您尝试使用的方法是 HTTP/1.1 升级到 HTTP/2,只有极少数网站(如果有的话)支持。
您的代码片段代表一个请求,而不是响应。
如果升级成功,HTTP/2 服务器会以 HTTP/1.1 格式发回 101 响应 和 对 GET
请求的响应 [= =32=]格式。这在 RFC 7540, section 3.2.
中指定
为了实现您想要的效果,即了解网站是否支持 HTTP/2,您必须尝试使用 HTTP/2 + TLS 进行连接。如果连接成功,您就知道支持 HTTP/2。如果失败,则不支持。
对于 Jetty(免责声明,我是 HTTP/2 模块维护者),您必须使用 JDK 8,代码将如下所示:
// Setup.
HTTP2Client http2Client = new HTTP2Client();
SslContextFactory sslContextFactory = new SslContextFactory();
HttpClient httpClient = new HttpClient(new HttpClientTransportOverHTTP2(http2Client), sslContextFactory);
httpClient.start();
// Does webtide.com support HTTP/2 ?
ContentResponse response = httpClient.GET("https://webtide.com/");
// No errors, yes it supports HTTP/2 !
如果你得到的响应没有错误,你就在HTTP/2,否则服务器不支持HTTP/2。
请记住,要使该代码正常工作,您必须使用 JDK 8 和引导类路径中正确的 ALPN 引导 jar,如指定的那样 here。
是否已经有办法在 Java 中获得 HTTP/2 响应 header?我尝试在一些库中搜索,例如 URLConnection、Undertow 甚至 Jetty,但都没有成功。
P.S.: 我在我的 Java 项目上使用 JDK 1.7。
另外,HTTP/2的回复header是这样的?
GET / HTTP/1.1
Host: server.example.com
Connection: Upgrade, HTTP2-Settings
Upgrade: h2c
HTTP2-Settings: <base64url encoding of HTTP/2 SETTINGS payload>
有没有已经在使用这个版本的网站?
我的主要目标是知道网站是否使用 HTTP/2 版本,有没有办法知道这一点而无需阅读 Java 中的响应 header项目?
谢谢。
HTTP/2 网站通常使用 TLS,因为浏览器仅支持 HTTP/2 over TLS。
您尝试使用的方法是 HTTP/1.1 升级到 HTTP/2,只有极少数网站(如果有的话)支持。
您的代码片段代表一个请求,而不是响应。
如果升级成功,HTTP/2 服务器会以 HTTP/1.1 格式发回 101 响应 和 对 GET
请求的响应 [= =32=]格式。这在 RFC 7540, section 3.2.
为了实现您想要的效果,即了解网站是否支持 HTTP/2,您必须尝试使用 HTTP/2 + TLS 进行连接。如果连接成功,您就知道支持 HTTP/2。如果失败,则不支持。
对于 Jetty(免责声明,我是 HTTP/2 模块维护者),您必须使用 JDK 8,代码将如下所示:
// Setup.
HTTP2Client http2Client = new HTTP2Client();
SslContextFactory sslContextFactory = new SslContextFactory();
HttpClient httpClient = new HttpClient(new HttpClientTransportOverHTTP2(http2Client), sslContextFactory);
httpClient.start();
// Does webtide.com support HTTP/2 ?
ContentResponse response = httpClient.GET("https://webtide.com/");
// No errors, yes it supports HTTP/2 !
如果你得到的响应没有错误,你就在HTTP/2,否则服务器不支持HTTP/2。
请记住,要使该代码正常工作,您必须使用 JDK 8 和引导类路径中正确的 ALPN 引导 jar,如指定的那样 here。