重定向URL
重定向的原因有哪些?【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、302、303响应状态码返回时,几乎所有的浏览器都会把POST改成GET,并删除请求报文内的主体,之后请求会自动再次发送
# 301、302标准是禁止将POST方法改变成GET方法的,但实际使用时大家都会这么做
301 Moved Permanently
永久性重定向。目标由 header 的 Location
字段给出,同时 body 中也应该有指向目标的链接。新请求使用的方法应该和原请求的一致。如果用户使用 HEAD
和 GET
以外的方式发起原请求,客户端在遇到 301 Moved Permanently
后应当询问用户是否对新的 URI 发起新请求。
302 Found # 尽管302标准禁止POST变换成GET,但实际使用时大家并不遵守
临时性重定向。
这应该是浏览器实现最不符合标准的一个状态码了。理论上,除了临时性这一点,302 Found
跟 301 Moved Permanently
应该是完全一样的。然而实质上,很多浏览器在遇到 302 Found
后就会使用 GET
去请求新的 URI,而无论原请求使用的是何种方法。由于这种现象的普遍存在,使得这成为了一个与书面标准相违背的事实标准,新的客户端在实现时很难选择应该遵守哪一个标准,所以 RFC 2616 专门新增了 303 See Other
和 307 Temporary Redirect
两个状态码来消除二义性。
303 See Other # 303明确表示客户端应该采用GET方法获取资源,这与302有区别
临时性重定向,且总是使用 GET
请求新的 URI。
304 Not Modified
如果客户端发起了一个「条件 GET
」,同时资源确实没被修改过,那么服务器端就应该返回 304 Not Modified
,同时 body 不包含任何内容。
所谓的「条件 GET
」,是指 GET
的 header 带上了 If-Modified-Since
或 If-None-Match
字段。这两个 header 就是「条件」,如果条件符合了 GET
就应该正常执行,否则就应该返回 304 Not Modified
,以便告诉客户端它想要请求的资源在上一次请求之后没有被更新过,客户端可以继续使用之前的版本。
307 Temporary Redirect # 307遵守浏览器标准,不会从POST变换成GET。但是,对于处理响应时的行为,每种浏览器有可能出现不同的情况
临时性重定向,且总是使用原请求的方法来进行新请求。
posted on 2014-05-28 14:51 nashviller 阅读(1022) 评论(0) 编辑 收藏 举报