Nodejs:重定向网址

Posted

技术标签:

【中文标题】Nodejs:重定向网址【英文标题】:Nodejs : Redirect URL 【发布时间】:2011-09-08 05:29:06 【问题描述】:

我正在尝试以这种方式在 node.js 中重定向我的应用程序的 url:

// response comes from the http server
response.statusCode = 302;
response.setHeader("Location", "/page");
response.end();

但是当前页面和新页面混在一起,看起来很奇怪:|我的解决方案看起来完全合乎逻辑,我真的不知道为什么会发生这种情况,但是如果我在重定向后重新加载页面,它会起作用。

无论如何,在节点中进行 HTTP 重定向的正确方法是什么?

【问题讨论】:

您是否尝试过在响应正文中发送内容? response.setHeader('Content-Type', 'text/plain'); response.end('<p>302. Redirecting to xxx.com</p>'); 【参考方案1】:

看起来 express 和你的方式差不多。据我所知,不同之处在于它们推送了一些正文内容并使用了绝对网址。

见 express response.redirect 方法:

https://github.com/visionmedia/express/blob/master/lib/response.js#L335

// Support text/plain,html by default
  if (req.accepts('html')) 
    body = '<p>' + http.STATUS_CODES[status] + '. Redirecting to <a href="' + url + '">' + url + '</a></p>';
    this.header('Content-Type', 'text/html');
   else 
    body = http.STATUS_CODES[status] + '. Redirecting to ' + url;
    this.header('Content-Type', 'text/plain');
  

  // Respond
  this.statusCode = status;
  this.header('Location', url);
  this.end(body);
;

【讨论】:

【参考方案2】:
server = http.createServer(
    function(req, res)
    
        url ="http://www.google.com";
        body = "Goodbye cruel localhost";
        res.writeHead(301, 
             'Location': url,
             'Content-Length': body.length,
             'Content-Type': 'text/plain' );

        res.end(body);
    );

【讨论】:

【参考方案3】:

是的,它应该是setHeader 中的完整网址。

  res.statusCode = 302;
  res.setHeader('Location', 'http://' + req.headers['host'] + ('/' !== req.url)? ( '/' + req.url) : '');
  res.end();

【讨论】:

【参考方案4】:

如果改为 307 会怎样?

【讨论】:

@CIRK 我当时改了答案。【参考方案5】:

此问题还可能取决于您正在处理的请求类型。无法使用标头重定向 POST 请求。例如,首次访问您在 FB 中的应用的访问者很可能是通过“签名请求”POST 来的,因此重定向将不起作用。

【讨论】:

以上是关于Nodejs:重定向网址的主要内容,如果未能解决你的问题,请参考以下文章

express - nodejs - 如果在子域中,则保留 URL 而不是重定向

如何知道我将被重定向到的 url? [nodejs] [节点获取]

如何在NGINX中重定向一个网址

伪静态网址301重定向到静态网址怎么实现

请问重定向与请求转发有啥区别?

重定向使用场景