代理和重定向之间有什么区别

时间:2016-06-23 10:21:46

标签: node.js express

我希望提供/的所有请求,就好像他们来/api/一样。例如,

/posts/应视为/api/posts/

据我所知,这是代理,但我不确定代理和重定向之间的区别。主要的混淆来自于redirect将响应标头的状态代码设置为302而代理将其设置为200

代理之间的区别是什么,以及我做我想做的事情的最佳方式是什么?

1 个答案:

答案 0 :(得分:3)

您可能需要的是rewriting:当某个特定端点的请求进入时,它会被重写为HTTP服务器可以处理的内容。

使用Express,您可以使用自定义中间件功能执行此操作:

app.use(function(req, res, next) {
  // If the current request doesn't start with `/api`...
  if (req.url.indexOf('/api') !== 0) {
    // ...rewrite it by prefixing it with `/api`.
    req.url = '/api' + req.url;
  }
  next();
});

你必须在你的路线之前加入它,所以它会在它们之前被调用。

这对客户来说是完全透明的:他们认为他们正在取回/posts的回复,即使在内部,它也由/api/posts处理程序处理。

如果您希望它是明确的,通过重定向,您可以使用以下内容:

app.use(function(req, res, next) {
  if (req.url.indexOf('/api') !== 0) {
    return res.redirect('/api' + req.url);
  }
  next();
});

这根本不透明。它告诉客户:“嘿,您尝试请求/posts,但您需要将您的请求定向到/api/posts。这意味着客户必须提出额外的请求。

代理基本上是一种复杂的重写方式,但不是仅修改请求以使其最终在正确的处理程序中,而是向/api/posts发出实际的内部HTTP请求,其结果将被发送回到客户端。在您的情况下,它是过度的(代理通常用于将请求传递给其他 HTTP服务器)。