gpt4 book ai didi

sockets - 将 HTTP 请求重定向/代理到辅助 HTTP 服务器

转载 作者:行者123 更新时间:2023-12-03 12:02:44 27 4
gpt4 key购买 nike

我使用一个名为 restbed 的 C++ 库。作为网络服务器来提供静态 HTML 文件。在 相同我正在运行另一个网络服务器,我想将一些传入连接重定向到 restbed。根据请求,我会决定将某些请求重定向到另一台服务器。

技术上可行吗如果我可以访问传入 HTTP 连接的底层套接字,建议相互连接两个套接字?

如果不是,那么常见的方法是什么?我只能为这两种服务使用一个 TCP 端口。

最佳答案

是的,您可以通过打开与另一个 HTTP 服务器的连接,将请求转发到该服务器,然后将响应转发回原始客户端来响应 HTTP 请求。事实上,面向 Internet 的系统通常会包含某种“前端”或“反向代理”或“L7 负载平衡器”或“API 网关”,它们通常会应用某种身份验证、输入验证或过程中的路由逻辑。

如果您自己构建它,它并不像打开一个到第二个 HTTP 服务器的套接字并逐字转发请求那么简单。您应该使用一些 HTTP 客户端库将请求发送到第二个服务器。换句话说,接收到原始请求的 HTTP 服务器应该转而成为第二个服务器的 HTTP 客户端。在为第二台服务器准备请求时,您应该从原始请求中复制一些但不是全部数据。

  • 您应该复制 HTTP 方法和 URL。
  • 您可能不应该复制该方案(http: 或 https:),因为客户端选择连接到原始服务器的方式不必影响该服务器将如何连接到第二台服务器;您可能对原始服务器使用 HTTPS,但使用 HTTP 转发请求。
  • 您不应该复制 Host header ,除非由于某种原因,第二台服务器已配置为响应与原始服务器相同的主机名。
  • 您不应复制会混淆您用于连接到第二个服务器的 HTTP 客户端库的 header 。例如,如果客户向您发送 Accept-Encoding: gzip然后它声称能够接受压缩响应,但是如果您转发该 header ,第二台服务器将认为您在服务器中使用的 HTTP 客户端库可以接受压缩响应,无论它实际上是否可以。
  • 如果您希望第二台服务器能够发送 304 Not Modified,则应转发缓存控制 header 如果客户端已经拥有该文件。

  • 如果您只是从第二台服务器提供静态文件,那么您可能只需发送 HTTP 方法和 URL 并忽略其他请求 header 即可工作。

    在响应方面,这是一个类似的故事。您可能应该复制一些标题,例如 Content-Type ,但其他人,如 Content-Length , 将由您的服务器设置,因此您不应复制这些 header 。尝试从不复制任何标题开始并查看它是否有效,然后复制单个标题以解决您发现的问题。您可能至少需要复制 Content-Type .

    HTTP 有很多特性,我不能指望在这里遍历所有可能的情况。我想说明的一点是,您不能只将一个请求或响应中的所有 header 复制到另一个请求或响应中,因为其中一些可能不适用,但您也不能只复制一个。您必须了解 header 的作用并适本地处理它们。

    您应该保留哪些 header 在很大程度上取决于您在第一台服务器中对请求和响应的处理程度。第一个服务器处理或解释请求和/或响应的次数越多,它与第二个服务器的交互就越独立于它与客户端的交互,并且您应该复制的 header 越少。

    关于sockets - 将 HTTP 请求重定向/代理到辅助 HTTP 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61858219/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com