Poco 库,HTTP 和 HTTPS 服务器

Poco Library, both HTTP and HTTPS server

提问人:Francisco Rascon 提问时间:11/15/2023 最后编辑:President James K. PolkFrancisco Rascon 更新时间:11/15/2023 访问量:51

问:

我想知道是否有可能拥有能够使用 Poco 库响应 http 和 https 请求的服务器。可能一种选择是运行 2 台服务器绑定不同的端口,有没有其他方法只使用 1 个端口?

我以前使用 Poco Library 1.09 实现了 https 和 http 服务器。

C++ HTTP HTTPS POCO库

评论

0赞 President James K. Polk 11/15/2023
默认情况下,大多数 HTTP(S) 客户端连接到端口 80 进行 HTTP 连接,端口 443 连接到 HTTPS 端口。那么你想在哪个端口上监听呢?
0赞 jabaa 11/16/2023
@PresidentJamesK.波尔克 为什么这很重要?您可以为 HTTP 和 HTTPS 打开端口 8080。AFAIK HTTP 和 HTTPS 始终位于 TCP 数据包中。服务器始终知道消息的开头。如果已加密,请将 HTTPS 请求传递给 HTTPS 服务器。如果未加密,请将其传递给 HTTP 服务器。
0赞 President James K. Polk 11/16/2023
@jabaa:我试图让OP用更多细节来澄清这个问题。目前尚不清楚到底想要什么。单个端口上的侦听器如何知道它正在处理的是 HTTP 请求还是 TLS 数据包?事实上,这是可以做到的,但它很棘手,可能太脆弱了,因此不是一个好主意。
0赞 jabaa 11/16/2023
@PresidentJamesK.Polk:这个问题很清楚,你的评论就是没有Poco的答案。这是可能的,但很棘手。实际问题是,Poco 是否可能。

答:

0赞 Joseph Larson 11/15/2023 #1

这通常是通过建立一个 nginx 前端来代理请求来完成的。这种方式的优点是可以快速配置,并且人们使用nginx管理https的所有标准工具都适合您 - 例如证书管理。

这也隔离了您的程序。它不侦听公共地址,只侦听本地主机地址,从而减少安全攻击面。

或者,如果您打算在 AWS 或类似服务上托管,您可以让负载均衡器处理 https,而您的程序可以只担心 http。

评论

0赞 jabaa 11/15/2023
如何使用nginx将HTTPS和HTTP绑定到同一个端口?
0赞 Joseph Larson 11/16/2023
几乎可以肯定的是,无论他做什么,他都需要使用 2 个端口。但是浏览器已经分别需要 80 和 443,如果你不指定端口,就像我在代码中使用的所有 REST 工具一样。但也许你有更好的解决方案。这就是 Stack Overflow。你应该分享你的答案。
0赞 jabaa 11/16/2023
不,您不需要两个端口。您可以打开一个端口,分析数据包并确定它是 HTTP 数据包还是 HTTPS 数据包。问题是你是否可以使用POCO来实现它,我不知道答案。
0赞 Joseph Larson 11/16/2023
@jabaa 这听起来很有趣,但任何使用此 API 的人都会出乎意料。他的问题不需要 1 个端口,只是问是否可能。我知道如何提供HTTP / HTTPS的唯一方法很清楚 - 2个端口,通过Poco的两个侦听器或使用引擎。如果我这样做,我会使用概述的 nginx。
0赞 jabaa 11/16/2023
是的,问题问,如果可能的话,这似乎是唯一的问题。我在这里找不到答案。也许,这是一个学术或理论问题,但你的答案应该回答它。