我可以通过 STDIN/STDOUT 说 HTTP/2 吗?

Posted

技术标签:

【中文标题】我可以通过 STDIN/STDOUT 说 HTTP/2 吗?【英文标题】:Can I speak HTTP/2 over STDIN/STDOUT? 【发布时间】:2019-02-28 13:51:03 【问题描述】:

我可以通过 STDIN/STDOUT 使用 HTTP/2 吗?如果是这样,我该怎么做,有什么限制?

【问题讨论】:

你为什么要这样做? @BarryPollard 使用 HTTP 与 Windows 上的本地程序通信,该程序在 Windows 10 之前没有 Unix 套接字 好的,但很好奇为什么你认为 HTTP(尤其是 HTTP/2)会是最好的协议而不是其他东西(任何东西?)? @BarryPollard 因为我想通过单个流代理服务器?有很多可能性——将 Web 应用程序作为桌面应用程序运行的(假设的)想法只是其中之一。另一个是通过 qrexec 代理 Docker 的控制套接字。 【参考方案1】:

严格来说HTTP/2 does by definition require a TCP connection:

HTTP/2 连接是在 TCP 连接 ([TCP]) 之上运行的应用层协议。客户端是 TCP 连接发起者。

HTTP/2 使用与 HTTP/1.1 相同的“http”和“https”URI 方案。 HTTP/2 共享相同的默认端口号:“http”URI 为 80,“https”URI 为 443。因此,处理目标资源 URI(如 http://example.org/foo 或 https://example.com/bar)请求的实现需要首先发现上游服务器(客户端希望建立连接的直接对等方)是否支持 HTTP/2

话虽如此,您可能可以调整协议以用于任何任意传输(如管道),但据我所知,目前还没有软件可以这样工作。如果确实存在这样的库,我希望在 HTTP/2 库的测试套件中看到它。这是一个网站containing a list of HTTP/2 test applications。其中一个可能具有与您正在寻找的模式相似的模式。

就优点和局限性而言,由于 HTTP/2 并非旨在以这种方式使用,因此我不确定在任何情况下都有多大优势。主要限制是相同的:大多数软件无法使用管道。

【讨论】:

以上是关于我可以通过 STDIN/STDOUT 说 HTTP/2 吗?的主要内容,如果未能解决你的问题,请参考以下文章

php的三种CLI常量:STDIN,STDOUT,STDERR

当父进程为 64 位时,StdIN/StdOUT 管道出现问题

替换然后通过 ssh 打开 stdin/stdout

stdin,stdout 和 STDOUT_FILENO,STDIN_FILENO

执行 linux 程序并通过 C/C++ 中的 stdin/stdout 与其通信的最简单方法

7-zip的标准输入输出(STDIN,STDOUT)与Ncat的配合使用,压缩后传输文件