重定向的原因有哪些?【1】网址变更了【2】权限不够
【1】网址变更了
【举例】以google为例,之前我们可以访问www.google.cn,但是后来Z.F不让我们访问它了,那么google公司为了避免用户无法访问google的搜索引擎,就做了1个引导用户的跳转。
当你在浏览器内输入www.google.cn,此时显示如下图:
这里引导用户去点击中心区域的图片,并且你看,在图片内也做了比较负责任的说明“请收藏我们的网址:google.com.hk”
当你点击了中心区域的图片,浏览器此时会显示“https://www.google.com.hk/webhp?hl=zh-CN&sourceid=cnhp”。【这串URL就是重定向了】
【2】权限不够
【举例】清空本地的cookies和缓存,访问http://www.lofter.com/uappsetting 试试看什么效果
试出来下面这个效果没?【下图的地址栏内的这串URL就是重定向了】
重定向在HTTP状态码内是3XX,具体可以参考别人的这篇文档:http://www.cnblogs.com/cathsfz/archive/2012/06/19/2553431.html
这篇文档非常好,摘录其中的1、2条摆在这里如下:
3xx
301 Moved Permanently
永久性重定向。目标由 header 的 Location
字段给出,同时 body
中也应该有指向目标的链接。新请求使用的方法应该和原请求的一致。如果用户使用 HEAD
和 GET
以外的方式发起原请求,客户端在遇到 301
后应当询问用户是否对新的 URI 发起新请求。
Moved Permanently
302 Found
临时性重定向。
这应该是浏览器实现最不符合标准的一个状态码了。理论上,除了临时性这一点,302
跟
Found301 Moved
应该是完全一样的。然而实质上,很多浏览器在遇到
Permanently302
后就会使用
FoundGET
去请求新的
URI,而无论原请求使用的是何种方法。由于这种现象的普遍存在,使得这成为了一个与书面标准相违背的事实标准,新的客户端在实现时很难选择应该遵守哪一个标准,所以
RFC 2616 专门新增了 303 See Other
和 307 Temporary
两个状态码来消除二义性。
Redirect
303 See Other
临时性重定向,且总是使用 GET
请求新的 URI。
304 Not Modified
如果客户端发起了一个「条件 GET
」,同时资源确实没被修改过,那么服务器端就应该返回 304
,同时 body 不包含任何内容。
Not Modified
所谓的「条件 GET
」,是指 GET
的 header
带上了 If-Modified-Since
或 If-None-Match
字段。这两个
header 就是「条件」,如果条件符合了 GET
就应该正常执行,否则就应该返回 304
,以便告诉客户端它想要请求的资源在上一次请求之后没有被更新过,客户端可以继续使用之前的版本。
Not Modified
307 Temporary Redirect
临时性重定向,且总是使用原请求的方法来进行新请求。
重定向URL