重定向介绍
-
概念
- 由服务器来发起的,浏览器使用者无法控制,相对地就可以称为“被动跳转”,在 HTTP 协议里叫做“重定向”(Redirection)。
- “Location”字段属于响应字段,必须出现在响应报文里。但只有配合 301/302 状态码才有意义,它标记了服务器要求重定向的 URI。
- 浏览器收到 301/302 报文,会检查响应头里有没有“Location”。如果有,就从字段值里提取出 URI,发出新的 HTTP 请求,相当于自动替我们点击了这个链接。
- 响应头字段 Location 指示了要跳转的 URI,可以用绝对或相对的形式。
-
java代码中的一种实现方式:
-
永久重定向&临时重定向
- 永久重定向:是指原来访问的资源已经永久删除啦,客户端应该根据新的URI访问重定向。
- 临时重定向:是指访问的资源可能暂时先用location的URI访问,但旧资源还在的,下次你再来访问的时候可能就不用重定向了。
-
重定向的状态码
Permanent(永久) Temporary(临时) Allows changing the request method from POST to GET. 301 302 Does not allow changing the request method from POST to GET. 308 307 -
状态码区别
- 301,302是http1.0的内容,303、307、308是http1.1的内容。
- 301和302本来在规范中是不允许重定向时改变请求方法的(将POST改为GET),但是许多浏览器却允许重定向时改变请求方法(这是一种不规范的实现)。
- 303的出现正是为了给上面的301,302这种行为作出个规范(将错就错吧),也就是允许重定向时改变请求方法。此外303响应禁止被缓存。
- 307和308的出现也是给上面的行为做个规范,不过是不允许重定向时改变请求方法。
-
不同状态码的使用场景
- 301
- 域名到期不想续费(或者发现了更适合网站的域名),想换个域名。
- 在搜索引擎的搜索结果中出现了不带www的域名,而带www的域名却没有收录,这个时候可以用301重定向来告诉搜索引擎我们目标的域名是哪一个。
- 空间服务器不稳定,换空间的时候。
- 302
- 未登录前先使用302重定向到登录页面,登录成功后再跳回到原来请求的页面。
- 有时候需要自动刷新页面,比如5秒后回到订单详细页面之类。
- 有时系统进行升级或者切换某些功能时,需要临时更换地址。
- 像微博之类的使用短域名,用户浏览后需要重定向到真实的地址之类。
- 电脑端与移动端的转换.比如我访问网页端页面https://www.taobao.com/,302重定向到了移动端页面m.taobao.com。
- 307
- 与302类似,只不过请求时不允许改变请求方式。
- 301