假设我要部署一个可能放置在 NAT/防火墙后面的服务器应用程序,并且我不想要求用户调整他们的 NAT 端口映射。换句话说,与服务器的连接是不可能的,但我的应用程序本质上是一个服务器应用程序,即它按 URI 发送回对象。
现在,我正在考虑定期从服务器启动连接,以查看需要响应的请求。我将通过端口 80 使用 HTTP,因为它几乎可以在任何地方通过 NAT/防火墙工作。
问题是,在实现可以在应用程序级别充当服务器的客户端(特别是使用 HTTP)时,是否有任何标准考虑和常见做法?任何特殊的 HTTP 标头?设计模式?
例如,我正在考虑以下方案:
- 客户端(这是我的逻辑服务器)向服务器发送一个虚拟 HTTP 请求
- 服务器以非标准的 headers
X-Request-URI:
、等作为响应X-Host:
,X-If-Modified-Since:
换句话说,将请求 headers 包裹在 X-xxx 中,因为在这种情况下它们不是标准的;还请求保持连接处于活动状态 - 客户端以发送请求对象的 POST 请求进行响应;再次,使用包装的标题(例如
X-Status:
,等)
除非有更“标准”的方式来做这样的事情,你认为我的方法是合理的吗?
编辑:这里在 reddit 上进行了一次有趣的讨论