- 当我们通过一个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/,
- 在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