我目前正在尝试学习nghttp2,并试图执行在本页底部提供的客户端代码:
https://nghttp2.org/documentation/tutorial-client.html
我执行了上面的C代码,执行以下操作:
./libevent-client URL我的服务器是Windows IIS 10.0,我希望在标题的输出中看到http2 2-设置框架。到目前为止,它显示了以下输出:
Connected
Request headers:
:method: GET
:scheme: https
:authority: MY URL
:path: /
Response headers from stream ID=1:
:status: 200
content-type: text/html
last-modified: Mon, 01 Jul 2019 17:57:17 GMT
accept-ranges: bytes
etag: "c7c5406c3630d51:0"
server: Microsoft-IIS/10.0
date: Mon, 08 Jul 2019 16:02:27 GMT
content-length:51
All headers received
<html><head>Hello</head><html>我需要知道在代码中应该需要什么,以查看http-设置是否被传递到请求中。我知道,下面的功能是通过请求发送设置帧的工作:
static void send_client_connection_header(http2_session_data *session_data) {
nghttp2_settings_entry iv[1] = {
{NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS, 100}};
int rv;
/* client 24 bytes magic string will be sent by nghttp2 library */
rv = nghttp2_submit_settings(session_data->session, NGHTTP2_FLAG_NONE, iv,
ARRLEN(iv));
if (rv != 0) {
errx(1, "Could not submit SETTINGS: %s", nghttp2_strerror(rv));
}
}我也不知道我们在http2协议中使用的标记是什么,就像我们有": method“、”:even“等的标记一样,甚至在RFC中也找不到。
发布于 2019-07-08 20:05:00
HTTP/2设置帧不是HTTP头--它是在连接开始时发送的单独消息。因此,不可能像HTTP头一样显示它。
HTTP/2包含许多这样的不可见控制帧:
...etc。
通常,浏览器和服务器不向用户或甚至在开发人员工具中显示这些控制消息。Chrome允许您使用chrome://net-export URL查看它们,也可以使用网络嗅探工具(如Wireshark )来查看它们。
然而,最简单的方法之一,也是通过检查原始框架来学习HTTP/2的一个非常好的方法,是使用nghttpd工具(它是nghttp2套件的一部分)来创建一个HTTP/2服务器,该服务器可以记录在详细模式下发送给它的任何消息,如下所示:
nghttpd -v 443 server.key server.crt在我的书中,我将更深入地讨论如何做到这一点,您可以在“:https://livebook.manning.com/#!/book/http2-in-action/chapter-4/176”中免费在线预览5分钟。
我应该说的一件事是,当通过非加密的HTTP/1.1连接(而不是HTTPS),然后升级到HTTP/2时,设置将以HTTP报头(称为HTTP2 2-设置)发送,但这是一个特例,在发送消息时是HTTP/1.1消息。此外,浏览器只支持HTTPS (有充分的理由)上的HTTP/2,我看到您也在使用HTTPS。因此,我会忽略这一点,只是为了完整地提及它。
https://stackoverflow.com/questions/56940660
复制相似问题