问题标签 [nghttp2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
77 浏览

post - 如何在 esp32 中使用 shlib(nghttp2) 发送一大块数据?

我想使用 HTTP2 连续发布数据。正如我发现的,唯一可行的解​​决方案是使用 shlib。我可以实现并使用它。但是我遇到了两个问题: 1- shlib 理论上不允许我们发送大于 16KB 的数据。在这里,我找到的解决方案是在不调用 NGHTTP2_DATA_FLAG_EOF 的情况下多次输入缓冲区。但是,主要问题是我们不能返回缓冲区的大小,虽然定义为 int,但不支持超过 16K 的长度。2- 发送超过 3 到 4K 的数据的故障率呈指数级增长,因为在这些情况下,只有少数数据包能够正确发送。

有什么建议吗?谢谢

我尽我所能确保资源不会相互干扰。这是我的代码:

0 投票
0 回答
38 浏览

nghttp2 - 如何使用 ngthttp2 发送帖子数据?

我正在使用 nghttp2 发送 http post 数据,但没有成功,有人可以帮助解决我的问题。

nghttp2的主要api是nghttp2_submit_request,关键代码如下:

静态无效_h2_client_submit_request(h2_client_session_data *session_data){

}

int send_len = 0; ssize_t data_prd_read_callback(nghttp2_session *session, int32_t stream_id, uint8_t *buf, size_t length, uint32_t *data_flags, nghttp2_data_source *source, void *user_data)

{

}

0 投票
1 回答
156 浏览

c++ - 带有 TLS 1.3 的“nghttp2::asio_http2::client” - SSL_CTX_set_cipher_list 不在密码套件中添加密码套件

我将 nghttp2 asio_http2_client 与 TLS 1.3 协议一起使用,但是当我尝试通过 SSL_CTX_get_ciphers 函数在密码套件列表中添加其他套件时,我的客户端问候消息中没有任何变化。即密码套件列表保持不变。

我的代码示例:

在wireshark中我看到以下输出(4个密码套件,但SSL_CTX_set_cipher_list参数中有更多密码套件): 在此处输入图像描述

我用 SSL_CTX_set_cipher_list 做了一个实验,并注释掉了下一行:

但密码套件列表保持不变。怎么了?

0 投票
0 回答
45 浏览

server - 我们如何响应客户端 h2c 升级请求,使用 nghttp2 库进行服务器实现

我们如何响应客户端 h2c 升级请求,使用 nghttp2 库进行服务器实现。如果 h2,ALPN 协商,但不确定我们如何在服务器端设置 h2c,响应 101-Switching-protocols..etc,并让 nghttp2 库处理服务器实现的进一步处理。任何帮助表示赞赏。

0 投票
1 回答
128 浏览

c++ - 如何使用 nghttp2 解决“空响应”错误?

我正在使用nghttp2_asio。我使用./configure --enable-asio-lib. 然后,我添加/usr/local/lib/etc/ld.so.conf文件中。代码如下:

当我尝试在 上打开浏览器(Chrome 或 Firefox)时http://localhost:8080,出现以下错误:

此页面不工作

localhost没有发送任何数据。

ERR_EMPTY_RESPONSE

即使我尝试使用curl,它也会给我错误:

curl:(52)来自服务器的空回复

唯一有效的是curl http://localhost:8080 --http2-prior-knowledge.

有解决方案吗?

0 投票
1 回答
265 浏览

c++ - 链接 nghttp2 静态库

我想在 C++ 中使用nghtt2_asio编译一个简单的服务器应用程序。

它在共享库下完美编译:

g++ server.cpp -O2 -std=c++20 -Wall -Wextra -lnghttp2_asio -lboost_system -lssl -lcrypto -o server

但是当我静态编译它时:

g++ server.cpp -static -O2 -std=c++20 -Wall -Wextra -o server -lssl -ldl -pthread -lcrypto -ldl -pthread -lnghttp2_asio -lboost_system

链接器给了我这些错误:

有人可以解释一下会发生什么吗?

0 投票
1 回答
27 浏览

asynchronous - 具有 1 个并发流的 HTTP2 请求

只是为了确认。我有一个简单的 http2 服务器,它会在 1 秒后响应,因此对每个传入请求强制延迟 1 秒。

事实:将 h2load 与单个并发流 (-m 1) 一起使用,我有 1 个请求/秒。

因此,即使通过异步调度 1 秒延迟来释放 tatsuhiro nghttp2 io 服务,在动态请求得到响应之前不会发送新请求。

这是预期的行为吗?

0 投票
1 回答
81 浏览

c++ - NgHttp2 调用请求数据处理程序两次,针对一个请求

我正在使用nghttp2. 我试图弄清楚为什么 调用on_data中的处理程序server.cpp两次。我知道它被调用了两次,因为当我发送一个包含数据的请求时,我得到了服务器中单个请求的以下日志输出。

但是如果我不在请求中发送数据。单个请求的日志输出是我所期望的

我使用客户端和这行代码将数据发送到服务器

auto req = sess.submit(ec, "GET", "http://127.0.0.1:3000/", "aaaaaaaaaa");

为了不发送数据,我只需删除第三个参数。

server.cpp

编译g++ server.cpp -o server.out -lnghttp2_asio -lboost_system -lcrypto -lpthread -lssl -lboost_thread

编译g++ client.cpp -o client.out -lnghttp2_asio -lboost_system -lcrypto -lpthread -lssl -lboost_thread

0 投票
1 回答
233 浏览

c++ - 如何使用 cmake 链接 nghttp2 asio 项目

我有一个项目,我想在其中使用nghttp2库。我正在尝试链接这个项目,CMakeLists.txt以便我可以用cmake.

我的项目结构

导入的主程序nghttp2

我的CMakeLists.txt文件如下

当我运行makecmake .出现以下错误

Main.cpp我可以手动编译

编辑:

我首先nghttp2在我的机器上安装它来编译它。然后将这一行添加到CMakeLists.txt

有没有更优雅的方法来做到这一点?

0 投票
0 回答
17 浏览

https - 如何为 https 流量配置本地修复端口

我在 ubuntu 上使用 nghttpx 作为代理,我已将 forntend 配置为 127.0.0.1:8443;no-tls 和后端到目标服务器 [url,port;proto=h2;tls;dns]。和 https 流量工作正常,但所有 https 流量都通过临时端口传输到目标服务器。目标服务器 https 流量通过临时端口,因此对于每个请求客户端端口都是不同的,我希望本地端口(修复端口)用于 nghttpx 上的 https 流量。是否有任何配置为后端 https 流量配置本地端口或绑定本地端口(修复端口)。