Skip to content

Latest commit

 

History

History
56 lines (51 loc) · 2.31 KB

11.md

File metadata and controls

56 lines (51 loc) · 2.31 KB

关于HTTP中的Redirect重定向

  • 当我们通过一个url去访问一个路径的时候,资源可能已经不在了
  • 服务器要告诉浏览器请求的资源在哪个地方,这时候就会用到Redirect重定向
  • 如果我们已经指定某个资源对应一个url,当你搬动资源后,不能直接废弃这个url
  • 废弃之后,直接会返回404资源不存在了,你应该告诉浏览器资源在哪里,也就是重定向

程序示例

  • server.js

    const http = require('http');
    
    http.createServer((req, res) => {
        console.log('req come: ', req.url);
        if(req.url === '/') {
            res.writeHead(302, {
                'Location': '/new'
            });
            res.end('');
        }
        if(req.url === '/new') {
            res.writeHead(200, {
                'Content-Type': 'text/html'
            });
            res.end("<div>Hello, This is new page!</div>");
        }
    }).listen(8000, () => {
        console.log('server is running on port 8000');
    });
  • 启动程序 $ node server.js

  • 访问:http://localhost:8000/

  • 打开浏览器控制台,可以看到

    • 首先访问的是http://localhost:8000/,
    • 在General中Status Code是302 Found(from disk cache)
    • 在Response Headers中的Location是/new 这时候会跳转
    • 然后跳转到的http://localhost:8000/new是正常的200
    • 如果写成这样呢?
      res.writeHead(200, {
          'Location': '/new'
      });
    • 上面这个是不会跳转的,真正起跳转作用的是302的HTTP Code
  • 302跳转需要服务端来指定,其语义是临时跳转

    • 不管怎么访问,它的跳转方式都是
    • 它会先跳转到/,之后再跳转到/new
  • 301跳转是永久跳转,要慎用

    • 因为如果不去清理浏览器缓存,不管服务端怎么更新,客户端浏览器会一直会跳转到这个设置的地址
    • 它的跳转方式是先跳转到/,之后再跳转到/new
    • 刷新浏览器(以后任何时候)访问/,浏览器会直接跳转到/new, 不会访问/
    • 也就是说,在下一次访问时,浏览器记住了这个设置,直接访问/new, 不会经过服务器的跳转
    • 其请求的Size显示: from disk cache, 即从缓存中读取
    • 所以,请慎用301