主动跳转和被动跳转
主动跳转:跳转动作是通过浏览器的使用者发起的
被动跳转:跳转动作是通过浏览器自动进行的,称为『重定向』
重定向状态码
301 永久重定向 原URI永久的不存在了,今后的所有请求都必须改用新的URI
浏览器看到 301,就知道原来的 URI“过时”了,就会做适当的优化。比如历史记录、更新书签,下次可能就会直接用新的 URI 访问,省去了再次跳转的成本。搜索引擎的爬虫看到 301,也会更新索引库,不再使用老的 URI。
302 临时重定向 原URI处于“临时维护”状态,新的URI是起“顶包”作用的临时工。
浏览器或者爬虫看到 302,会认为原来的 URI 仍然有效,但暂时不可用,所以只会执行简单的跳转页面,不记录新的 URI,也不会有其他的多余动作,下次访问还是用原 URI。
303 see other:重定向以后改成了GET方法,访问一个结果页,避免Post、put重复操作
307 Temporary Redirect:类似 302,但重定向后请求里的方法和实体不允许变动,含义比 302 更明确;
308 Permanent Redirect:类似 307,不允许重定向后的请求变动,但它是 301“永久重定向”的含义。
重定向的场景
一个最常见的原因是『资源不可以用』,需要另一个URI来代替
不可用的原因:如域名变更,服务器变更,网站改版,系统维护
另一个原因就是『避免重复』,让多个网址都跳转到同一个URI,增加访问入口的同时还不增加额外的工作量
如有的网站是申请多个域名,然后把他们重定向到主站上
外部重定向和内部重定向
外部重定向:服务器会把重定向的地址给浏览器,然后浏览器再次的发起请求,地址栏的地址变化了。
内部重定向:服务器会直接把重定向的资源返给浏览器,不需要再次在浏览器发起请求,地址栏的地址不变。
重定向,主要用在未登录或者权限不足的场景,跳转到对应的登录或提升页面之中。
当然,通用的SSO(单点登录)也是这样做的。
ps: 转发是服务器内部重定向
重定向的相关问题
第一个问题是『性能损耗』,重定向的机制决定了一个跳转会有两次请求-应答, 比正常的访问多了一次。
第二个问题是『循环跳转』。如果重定向的策略没有设置好,可能会出现A->B->C->A的无限循环。