【问题标题】:Can I forward an http request from one node.js or python server to another server?我可以将 http 请求从一个 node.js 或 python 服务器转发到另一台服务器吗?
【发布时间】:2016-02-12 17:13:08
【问题描述】:

您好,我有这个问题,我还没有找到答案。 我想创建类似于我附加的图像的东西。

正常的工作流程应该是这样的:

  1. 客户端向服务器 1 发送请求;
  2. 服务器 1 收到请求;
  3. 服务器 1 向客户端发送 302(重定向)响应;
  4. 然后客户端向服务器2发送一个新的http请求;
  5. 服务器 2 收到请求;
  6. 服务器 2 向客户端发送 200(ok)响应;

我想要实现的不是这个:

  1. 客户端向服务器 1 发送请求;
  2. 服务器 1 收到请求;
  3. 服务器 1 将请求转发给服务器 2;
  4. 服务器 2 收到请求;
  5. 服务器 2 向客户端发送直接响应;

所以我不想从服务器 1 向客户端发送重定向响应,然后从客户端向服务器 2 发送新请求!

有可能用 node.js 或者至少用 python 来实现类似的东西?我希望这种架构能够加快我的服务速度,因为服务器-服务器连接比客户端-服务器连接快得多。

【问题讨论】:

    标签: python node.js http server server-communication


    【解决方案1】:

    如果您需要在 server1 执行对 server2 的请求之前执行一些逻辑(例如根据请求的某些条件选择服务器 2 中的端点),那么您可以使用 Node.js 标准库 http 模块中的请求函数(请参阅https://nodejs.org/dist/latest-v4.x/docs/api/http.html#http_http_request_options_callback) 上的文档。但如果您不需要执行任何逻辑,那么最好使用https://www.npmjs.com/package/http-proxy,因为您可以避免大量样板代码。

    【讨论】:

    • 是的,我需要做一些逻辑。首先,服务器 1 检查文件系统中是否存在文件 - 如果文件存在,则将其返回给客户端 - 否则调用服务器 2 来获取文件。所以我想你提到的第一种可能性是正确的。然后省略实现我真的很想知道在返回客户端的路上是否有必要从服务器2经过服务器1(这将是一个巨大的时间浪费)
    • 一旦 server1 向 server2 执行 HTTP 请求,您就可以将 server2 响应通过管道传输到 server1 响应中。这样 server2 响应由 server1 流式传输到客户端。严格来说,从客户端到 server2 的直接连接是不可能的,因为对 server2 的请求是由 server1 而不是客户端执行的。
    【解决方案2】:

    您需要使用代理。

    类似的东西 https://www.npmjs.com/package/http-proxy

    或者你可以在 node.js 服务器前面使用 nginx 或类似的东西作为代理。

    唯一的问题是请求必须通过代理返回,因为这就是 tcp 连接的工作方式

    【讨论】:

    • 没有办法直接从服务器 2 到客户端通信吗?通过服务器 1 会浪费时间(因为服务器 1 无法详细说明其他请求)
    • 如果您正确地对服务器 1 进行编程 - 是的,它可以详细说明其他请求。来自客户端的连接是到服务器 1,请求和响应必须通过同一个连接。 Web 服务器旨在同时支持多个连接,因此您不会在将请求传递到服务器 2 时阻止其他请求。这样的代理是瓶颈是服务器 2 而不是服务器 1 的大型网站的标准做法。
    猜你喜欢
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 2012-04-23
    • 2012-12-27
    • 2022-12-10
    • 2016-05-15
    相关资源
    最近更新 更多