我可以将一个http请求从一个node.js或python服务器转发到另一台服务器吗?
问题描述:
你好,我有这个问题,我还没有找到anwser。 我想创建类似于我附加的图像。 我可以将一个http请求从一个node.js或python服务器转发到另一台服务器吗?
正常工作流应该是这样的:
- 客户端发送到服务器1的请求;
- 服务器1收到请求;
- 服务器1向客户端发送302(重定向)响应;
- 然后客户端发送一个新的http请求到服务器2;
- 服务器2收到请求;
- 服务器2向客户端发送200(ok)响应;
取而代之的是我想实现这样的:
- 客户端发送到服务器1的请求;
- 服务器1收到请求;
- 服务器1将请求转发到服务器2;
- 服务器2收到请求;
- 服务器2向客户端发送直接响应;
所以我不想从服务器1从客户端发送重定向响应客户端,然后一个新的请求到服务器2!
用node.js或者至少用python来实现类似的东西是可能的。我希望这种架构能够加快我的服务速度,因为服务器 - 服务器连接远快于客户端 - 服务器连接。
答
您需要使用代理。
喜欢的东西 https://www.npmjs.com/package/http-proxy
,或者您可以使用nginx的或类似的的node.js服务器的前面是代理。
的唯一事情是请求必须通过代理回去,因为这就是如何TCP连接工作
答
如果你需要做一些逻辑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,因为您避免很多样板代码
无法直接从服务器2与客户端进行通信吗?通过服务器1将会浪费时间我(因为服务器1无法详细说明其他请求) – Giuseppe
如果您正确编程服务器1 - 是的,它可以详细说明其他请求。从客户端连接到服务器1,并且请求和响应必须沿着相同的连接。 Web服务器被设计为同时支持多个连接,因此您不会通过将请求传递到服务器2来阻止其他请求。这样的代理是大型网站的标准做法,其中瓶颈是服务器2而不是服务器1。 – akc42