今天聊一个比较轻松的知识点,重定向;
在聊重定向之前先说下HTTP中的跳转;
在HTTP中跳转分为两种,【主动跳转】【被动跳转】
主动跳转
由客户端的使用主动发起的,称为主动跳转;
被动跳转
有一类跳转是由服务器发起的,客户端的使用者无法控制,我们称之为被动跳转;
HTTP协议里面专门名词叫做【重定向】
重定向
回忆下之前学过重定向的知识
301永久重定向
302临时重定向
当客户端收到上述两个状态码就会发起一个新的请求;
那么它是怎么知道新请求的URI的呢?
Location头字段
如果此时状态码是【301】或者【302】时会在响应报文的头中包含Location字段
Location /index.html
这个Location字段就是用来告知你要新请求那个URI
Location中携带的URI也分为【部分URI】和【完整URI】
【完整URI】就不用说了,取出来就用
当返回的是【部分URI】通常是仅有path和query部分
这时就复用上一次的scheme、host:port 的值拼接拿到的path和query做一次新的请求;
当遇见301和302时浏览器都干啥了
相同的操作就是取道Lcoation的URI,进行新一次的跳转/请求;
301
称为永久重定向,意思就是你之前请求的URI过期了作废了,以后的请求都要用新的URI
当浏览器看到这个301就知道怎么回事了,做适当的优化,保存新的URI,当下次请求时直接用这个新的URI
少了一次请求;
使用场景
当【域名】、【服务器】发生大幅度改变,比如用了新域名、服务器切换到了新机房;
原来的URI不能使用了,必须使用【301】;
302
称为临时重定向,原有的URI处于临时维护的状态,新的URI是当作替补,当原有的URI恢复了就可以继续使用了;
使用场景
原有的URI正在进行维护,会在将来某个时间会恢复的;
常见的有系统维护,网站重定向到一个通知的页面;
重定向相关问题
性能损耗
重定向中一个请求会有两次的【请求-应答】,比咱正常访问多了一次;
循环跳转
重定向策略设置有问题,可能会造成 【A==>B==>C==>A】
在HTTP协议中规定,浏览器具有检测【循环跳转】的能力,遇到这种情况停止发送请求;
网友评论