文章目录

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

1、简介

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

我们先说301永久重定向。

2、301永久重定向

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

抓取一个301重定向的数据包如下,内容如下:

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

使用Burp抓取,也可以看到Location字段,即重定向后的位置

对于301重定向的使用没有规定,即使很短时间的更换资源位置信息,也可以使用301重定向。

3、302临时重定向

302状态码是临时重定向(Move Temporarily),表示所请求的资源临时地转移到新的位置,一般是24到48小时以内的转移会用到302。

对于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状态码301和302的区别详解相关推荐

  1. 重定向状态码301和302的区别

    对于URL来讲,可以用状态码301或302改变URL地址值实现重定向,重定向是指向服务器发送重定向的数据,服务器返回新的URL地址值跳转 301永久重定向 301为永久重定向,重定向一次后浏览器会保存 ...

  2. 状态码301和302的区别?

    301 Moved Permanently 永久性重定向.该状态码表示请求的资源已被分配了新的 URI,以后应使用资源现在所指的URI. 也就是说,如果已经把资源对应的 URI 保存为书签了,这时应该 ...

  3. HTTP状态码301和302的区别

    简介 在HTTP状态码中,3XX表示重定向,指网页发生了转移,重定向到目标地址中. 301:表示永久性转移 (Permanently Moved) 302:表示临时性转移(Temporarily Mo ...

  4. 状态码301和302的区别

    原文地址:https://www.cnblogs.com/zhuzhenwei918/p/7582620.html 定义如下: 301 Moved Permanently 被请求的资源已永久移动到新位 ...

  5. HTTP 状态码 301 和 302 详解及区别——辛酸的探索之路

    转自:http://blog.csdn.net/grandpang/article/details/47448395 一直对http状态码301和302的理解比较模糊,在遇到实际的问题和翻阅各种资料了 ...

  6. http状态码301和302详解及区别——辛酸的探索之路

    一直对http状态码301和302的理解比较模糊,在遇到实际的问题和翻阅各种资料了解后,算是有了一定的理解.这里记录下,希望能有新的认识.大家也共勉. 官方的比较简洁的说明: 301 redirect ...

  7. http状态码301和302详解及区别

    一直对http状态码301和302的理解比较模糊,在遇到实际的问题和翻阅各种资料了解后,算是有了一定的理解.这里记录下,希望能有新的认识.大家也共勉. 官方的比较简洁的说明: ​ 301 redire ...

  8. html状态中的302代码含义,网站状态码301与302的作用与区别

    网站如果进行了改版,如果URL地址也发生了变化,那么就需要用到301或302把旧的网址临时或永久的重定向到新的网址上去,这样不仅可以增强用户的体验,而且对搜索引擎的收录还是很好的.那么今天飞鸟慕鱼博客 ...

  9. http状态码301、302、303、307、308区别

    3xx开头的状态码都表示重定向. 先说明一些版本问题, 301和302都是http1.0就定义好的,在http1.1中才新增了 其余的状态码. 301 Moved Permanently 永久重定向 ...

最新文章

  1. Window下mysql的安装
  2. 吉大18秋学期C语言作业二答案,吉大18秋《C语言程序设计》在线作业12参考
  3. 【连载】如何掌握openGauss数据库核心技术?秘诀一:拿捏SQL引擎(4)
  4. mac服务器证书失效,Mac OS X Server:软件更新证书过期
  5. centos安装mysql8_Docker 快速安装 Mysql
  6. 贪心算法的python实现
  7. IOException: Broken pipe
  8. 创建一个滚动的文本字幕。
  9. C中常量数组不能修改
  10. html5 抓取网页数据,从网页抓取数据的一般方法
  11. 微信小程序背景图片设置问题
  12. c语言 步进电机 程序,步进电机c语言控制程序
  13. 对硬盘进行分区时,GPT和MBR有什么区别?
  14. rancher 启动命令_Rancher 快速上手指南操作(1)
  15. python计算字节数_Python len()函数详解:获取字符串长度或字节数
  16. Windows XP 启动过程jjhou
  17. mysql udal_mysql分表分区
  18. ms-sql数据类型和access数据类型大全
  19. 软件第三方检测中心怎么选择,具备CNAS资质的确认测试报告有什么用?
  20. 浴血黑帮第三季/全集Peaky Blinders迅雷下载

热门文章

  1. 4.Android组件Activity
  2. 如何优雅的在 Microsoft word中插入代码
  3. shiro第二讲 单Realm实例
  4. 【链塔DApp日报】BDI指数增长23%,以太坊24h交易额增长56%
  5. 用您的思想和IBM Bluemix物联网控制Droid
  6. 使用快慢指针判断链表是否有环
  7. cmd查看所有数据库 db2_DB2 常用操作命令集合
  8. 每周全球科技十大新闻(2020.7.20-7.26)
  9. linux桌面xfce美化_为什么要为轻量级Linux桌面选择Xfce
  10. STM32单片机USMART组件原理分析理解