HTTP的跳转和重定向

Android_Banner.jpg

今天聊一个比较轻松的知识点,重定向;

在聊重定向之前先说下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协议中规定,浏览器具有检测【循环跳转】的能力,遇到这种情况停止发送请求;

你可能感兴趣的:(HTTP的跳转和重定向)