HTTP状态码301和302的区别详解

文章目录

    • 1、简介
    • 2、301永久重定向
    • 3、302临时重定向
    • 4、为何要重定向?
    • 5、何时会重定向?
    • 6、301和302的区别
    • 7、302的危害/风险

1、简介

HTTP状态码中,301和302都是网页重定向跳转,但是两者的使用场景和效果是不一样的,不认真学习很容易搞混,下面我对自己学习的结果做简单总结。

我们先说301永久重定向。

2、301永久重定向

301状态码是永久重定向(Moved Permanently),表示所请求的资源已经永久地转移到新的位置,这包含域名的改变或者是资源路径的改变。

抓取一个301重定向的数据包如下,内容如下:
HTTP状态码301和302的区别详解_第1张图片

  • Location字段表示重定向后的资源新位置
  • Request URL字段表示请求的资源旧位置

使用Burp抓取,也可以看到Location字段,即重定向后的位置
HTTP状态码301和302的区别详解_第2张图片
对于301重定向的使用没有规定,即使很短时间的更换资源位置信息,也可以使用301重定向。

3、302临时重定向

302状态码是临时重定向(Move Temporarily),表示所请求的资源临时地转移到新的位置,一般是24到48小时以内的转移会用到302。
HTTP状态码301和302的区别详解_第3张图片
对于302的使用是有规范的,只有在资源位置24到48小时内临时转移时,才可以使用302重定向,超过就必须使用301永久重定向。

虽然说短时间的资源位置转移会用到302临时重定向,但是并不提倡使用302,尽量使用301永久重定向, 因为302会有安全隐患,具体见下文。

4、为何要重定向?

在刚学习这部分内容时,就会有这样的疑问:为什么会出现重定向这个操作?

查询得知:

  • 网站是会被大量用户收藏在自己的浏览器收藏夹的,当然收藏的是URL,即资源位置,当网站原资源路径发生改变时,如果不进行重定向操作,当用户再次访问收藏的资源时,由于原位置已经改变不存在,那么服务器只会给用户返回404,这是不应该发生的。

  • 因此出现了重定向操作,即当用户访问改变了位置的资源时,通过服务器的反馈得知资源位置已经改变,随即浏览器就会访问改变后的资源位置,而不会引发404。

这就是为什么需要重定向。

5、何时会重定向?

至于何时会重定向,结合网上给出的,大致有以下几种情况:

  • 域名更换(旧域名更换为新域名)
  • 多域名跳转(多个域名跳转至主站,进行引流)
  • 网站调整(如改变网页目录结构)
  • 路径改变(如网页被移到一个新地址)
  • 网页扩展名改变(如应用需要把.php改成.html或.shtml)

在这几中情况中,一般只有原路径或域名存在的情况下可能会使用到302,其余的都推荐使用301

6、301和302的区别

通过上文已知,301和302都是重定向,但是有临时和永久的区别,可具体的区别呢?如何选择301或302?

对于区别,百科是这样解释的:

  • 302重定向是暂时的重定向,搜索引擎会抓取新的内容而保存旧的网址。由于效劳器前往302代码,搜索引擎以为新的网址只是暂时的。
  • 301重定向是永久的重定向,搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址。

根据上述以及查询实践,我的理解是:

  • 302虽然是重定向,但鉴于其实临时的,所以浏览器对于自己的URL缓存不会改变,依然是原路径。

    在302重定向结束后,只需要删除相应的重定向相关代码即可恢复原状,用户点击收藏夹依然可以访问资源。

  • 01是永久的,所以浏览器会更改自身的URL缓存,将旧的路径换为新的路径。

    在301重定向结束后,如果只删除重定向相关代码,客户端的URL缓存是不会改变的,因此用户点击收藏夹时,就会访问之前301时新的URL,但是该路径已经被删除换为旧的路径,因此用户得到的只会是404。

    此时要想让用户可以正常访问,可通过以下几种方式:

    • 服务端再次301重定向,将改变后的地址重定向到原地址,这样更新了URL的用户再次点击时就会重新更新回原地址;
    • 客户端清理浏览器缓存,这样就会把更新了的URL清除掉,点击收藏夹依然是旧的URL。

    一般都是通过第一种方式,让服务端来进行相关操作。

而且,302的临时重定向不会将原搜索流量导入到新的地址,但是301会,这对于搜索排名有很大用处。

知道了两者的实际区别,那么如何选择也就视情况而定了,但是一般不推荐使用302,因为会有许多风险。

7、302的危害/风险

302的风险大致有以下几种:

  • URL劫持
    从网址A做一个302重定向到网址B时,主机服务器的隐含意思是网址A随时有可能改主意,重新显示本身的内容或转向其他的地方。大部分的搜索引擎在大部分情况下,当收到302重定向时,一般只要去抓取目标网址就可以了,也就是说网址B。如果搜索引擎在遇到302转向时,百分之百的都抓取目标网址B的话,就不用担心网址URL劫持了。问题就在于,有的时候搜索引擎,尤其是Google,并不能总是抓取目标网址。比如说,有的时候A网址很短,但是它做了一个302重定向到B网址,而B网址是一个很长的乱七八糟的URL网址,甚至还有可能包含一些问号之类的参数。很自然的,A网址更加用户友好,而B网址既难看,又不能用户友好。这时Google很有可能会仍然显示网址A。由于搜索引擎排名算法只是程序而不是人,在遇到302重定向的时候,并不能像人一样的去准确判定哪一个网址更适当,这就造成了网址URL劫持的可能性。也就是说,一个不道德的人在他自己的网址A做一个302重定向到你的网址B,出于某种原因,Google搜索结果所显示的仍然是网址A,但是所用的网页内容却是你的网址B上的内容,这种情况就叫做网址URL劫持。你辛辛苦苦所写的内容就这样被别人偷走了。302重定向所造成的网址URL 劫持现象,已经存在一段时间了。不过到目前为止,似乎也没有什么更好的解决方法。在谷歌曾进行的Big Daddy数据中心转换中,302重定向问题也是要被解决的目标之一。从一些搜索结果来看,网址劫持现象有所改善,但是并没有完全解决。
  • 网站降权
    由于使用302跳转导致搜索引擎认为是非法引用,来干扰搜索结果,所以会进行降权惩罚。

对于301和302的学习暂时到此。

你可能感兴趣的:(HTTP,Web通识)