问题标签 [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 投票
1 回答
10413 浏览

linux - 将 --http2.0 选项与 curl 7.33.0 一起使用会提供不受支持的协议

我正在使用 centos 6.2,我需要在其中一个服务器请求中使用 curl --http2.0,但是在查看http://curl.haxx.se/docs/manpage.html后,我使用的是7.19.6我认为 --http2.0 选项仅支持 curl 7.33.0,所以为了解决这个问题,我按照http://www.linuxfromscratch.org/blfs/view/svn中的步骤安装了 curl 7.33.0 /basicnet/curl.html 安装 curl 后,我尝试使用它,但它仍然给我错误curl(1):unsupported protocol,我使用以下命令检查了我的 curl 版本:curl --version这是给我 :

我需要使用这个 --http2.0 但没有得到任何我能做到的东西?由于安装了 curl 7.19,并且我重新安装了更高版本的 curl,这有什么问题吗?

0 投票
2 回答
5680 浏览

curl - cURL 不适用于 nghttp2

我想将 http/2 与 cURL 一起使用。首先,当我尝试此操作时出现错误curl --http2 https://http2.akamai.com/- "Protocol not supported"。我安装了 nghttp2 并重新安装了 cURL,就像这里描述的那样。错误消失了,我现在可以获取数据curl --http2。但是页面https://http2.akamai.com/告诉我“此浏览器未启用 HTTP/2”,而在 chrome 中或直接通过 nghttp2 显示“您现在正在使用 HTTP/2!” .

我正在使用 mac os x 并通过自制软件将所有依赖项安装在最新版本中。我在这里下载的 curl 源代码 (7.41) 。

0 投票
1 回答
565 浏览

firefox - 为本地 HTTP/2 代理生成证书

我试图让 Firefox 每晚使用安全的 HTTP/2 代理,但它拒绝接受自签名证书。

该代理由 nghttp2 作为 HTTP/2 前端和一个简单的 Twisted 代理作为后端组成。Twisted 代码来自https://wiki.python.org/moin/Twisted-Examples,可作为 HTTP/1.1 代理自行工作。nghttp2 被调用

Firefox 将其用作https://nghttp2.org/documentation/nghttpx-howto.html#http-2-proxy-mode中指定的代理。

我使用为 localhost 创建了 server.pem

当我尝试通过代理加载像http://www.something.com这样的通用网站时,Firefox 会显示“此连接不受信任”警告。但是,如果我告诉它添加并存储异常,它只会再次显示警告。据我所知,它永远不会通过 nghttp2 前端到达 Twisted 代理。

我应该为安全代理认证做一些不同的事情吗?除了 nghttp2 说明“请注意,Firefox nightly 和 Chromium 都需要有效的安全代理证书”之外,我在网上找不到太多信息。

0 投票
2 回答
3412 浏览

jetty - Jetty HTTP/2 客户端接收服务器推送示例

Jetty 的支持服务器推送的 HTTP/2 客户端已在 Jetty 9.3 RC ( Link ) 中实现。但是,我还没有找到与此相关的任何文档或示例代码。任何人都可以提供一个示例代码,例如从该站点接收推送的资源:https ://nghttp2.org (已启用 http2 服务器推送的公共服务器)

---更新 1--- 我已经尝试测试这个文件,正如 sbordet 所说。但是,执行此行后

我遇到了这个错误

这是我的pom.xml

这是我的项目目录

---更新2---

将我的pom.xml <build>标签更改为:(明确使用 JDK 8 并添加 -Xbootclasspath 以指向 Jetty 提供的 alpn-boot.jar)。我正在使用 Java 8 更新 31

执行此命令后:

尝试连接到https://webtide.com/(Client.java文件中的默认主机)时出现此错误

连接到https://nghttp2.org/时出现此错误

---更新3---

采取不同的方法:当我拉出整个码头项目的所有主分支,然后创建一个 Intellij 项目时,jetty.project/jetty-http2/http2-client它适用于公共服务器https://webtide.comhttps://nghttp2.org。但是当我在我的自签名证书 http2 服务器上测试它时(使用 nghttp2 + nginx,驻留在我的虚拟机中)然后我得到这个错误

0 投票
3 回答
2590 浏览

curl - 如何从代码中禁用服务器密钥交换?

我在 Ubuntu 15.04 上从nghttp2运行 HTTP2 服务器示例 (libevent-server.c) 。我想使用 Wireshark 嗅探客户端-服务器之间的 HTTP2 数据包。

我没有使用任何网络浏览器作为客户端,所以这里解释的如何在 Wireshark 中读取 HTTP2 消息的提示不适用于我的项目。我使用 libcurl。

由于 HTTP2 数据包是 TLS 内部的应用层,Wireshark 必须知道如何解密它;因此,我按照这里的指南为 Wireshark 提供了密钥。但是该指南警告说,“如果服务器发送 ServerKeyExchange 消息,您将无法解密数据。” 不幸的是,我的 Wireshark 显示服务器密钥交换是由服务器发送的。

以下是 libevent-server.c 代码片段:

OPENSSL_config(NULL)更改为后我重新编译了代码,OPENSSL_no_config()但仍然发送了服务器密钥交换。

如何禁用服务器密钥交换?

0 投票
0 回答
259 浏览

http2 - nghttpx 通过 HTTP/2 通信导致比 HTTP/1.1 更多的网络流量

我有这个设置:

[网站]--WAN--[Squid]---[nghttpx #2]--WAN--[nghttpx #1]---[网络浏览器]

nghttpx #1 通过 HTTP/1.1 接受来自本地 Web 浏览器的 HTTP 代理请求,并与请求 Web 站点的 nghttpx #2 建立 HTTP/2 连接,并通过相同的路径返回内容。目标是通过将 nghttpx #1 连接到 nghttpx #2 的 WAN 建立 HTTP/2 连接,以保持网络流量。

nghttpx #1 运行为:

nghttpx -p -f127.0.0.1,8080 -b nghttpx #2 IP ,8443 --backend-no-tls --log-level=INFO

nghttpx #2 运行为:

nghttpx -s -f'*,8443' -b127.0.0.1,12345 --backend-no-tls --frontend-no-tls --log-level=INFO

Squid 在端口 12345 上的位置。

现在,我通过/usr/bin/netstat -i -b -n -I interface在 nghttpx #1 和 Web 浏览器运行的 WAN 网络接口上测量字节数。在没有任何代理的情况下直接访问时输入字节,我测量 ~150 kB 来加载网站。有了这个 nghttpx 链,它大约为 170 kB。我很惊讶地看到我在使用 HTTP/2 时实际上获得了更多的网络流量。

问题:HTTP/2 不应该因为压缩而节省流量吗?我究竟做错了什么?

谢谢!

0 投票
1 回答
1438 浏览

http2 - nghttp2:POST 有效载荷

我正在尝试使用 nghttp2 发布数据集。我注意到nghttp2_submit_request发送stream_user_data只是通过标题帧而不是数据帧。

使用 nghttp2 提交数据(json 或二进制)的便捷方法是什么?我应该使用nghttp2_submit_data还是使用 asio session.submit

0 投票
1 回答
421 浏览

google-chrome - httpd-2.4.18 mod_http2 适用于 curl 和 nghttp 但不适用于浏览器

我已经安装了带有 nghttp 1.6.0 和 curl 7.46 的 httpd-2.4.18 以使用 http2 服务器。当我使用 Curl 和 nghttp 命令测试服务器时,服务器似乎可以使用 http2(如下所示),但是当我使用浏览器(Google Chrome 47.0.2526.106)时,响应标头是 http1 而不是 http2,而 Spdy指示器是灰色的(应该是蓝色的)。有人知道为什么吗?

使用的命令

使用的 curl 命令告诉我 http2 可以正常工作:

与 nghttp2 相同,似乎 http2 服务器使用以下命令正常工作:

来自浏览器的响应标头:

来自浏览器的请求标头:

0 投票
1 回答
709 浏览

http - HTTP/2 协议中的 WINDOW_UPDATE 和 SETTINGS 帧有什么区别?

我已经阅读了一些 HTTP/2 rfc7540规范,但我并不完全理解 HTTP/2 协议中 WINDOW_UPDATE 和 SETTINGS 帧之间的区别是什么?

0 投票
1 回答
106 浏览

apache2.4 - 当我进行 http2 推送时,我向服务器发出请求?

我有一个带有 http2 的服务器,当某些客户端请求 index.html 时,我配置了 4 个图像的推送,并且它可以工作,但是我在 apache 的 access_log 上看到客户端对图像提出了一些请求。这是正确的吗?我的意思是,我认为access_log应该只有index.html的请求,客户端得到索引和推送图像的响应,而不是推送图像的请求。

这就是我的 access_log 的内容: