HTTP状态码301和302的区别详解
1 简介
HTTP的状态码中,301和302都是网页重定向跳转,但是两者的使用场景和效果是不一样的。
2 301永久重定向
301状态码是永久重定向(Moved Permanently),表示请求的资源已经永久地转移到新的位置,这包含域名的改变或者是资源路径的改变。
抓取一个301重定向的数据包如下,内容如下:
Location字段表示重定向后的资源新位置
Request URL字段表示请求的资源旧位置
使用Burp抓取,也可以看到Location字段,即重定向后的位置
3 302临时重定向
302状态是临时重定向(Move Temporarily),表示请求的资源临时地转移到新的位置,一般是24-48小时以内的转移会用到302。
对于302的使用是有规范的,只有在资源位置24到48小时内临时转移时,才可以使用302重定向,超过就必须使用301永久重定向。
虽然说短时间的资源位置转移会用到302临时重定向,但是并不提倡使用302,尽量使用301永久重定向。
4 为何要重定向?
这个问题我也是困惑了很久,一直不理解为什么会有重定向这个操作?
于是查询得知:
网站是会被大量用户收藏在自己的浏览器收藏夹的,当然收藏的是URL,即资源位置,当网站原资源路径发生改变时,如果不进行重定向操作,当用户再次访问收藏的资源时,由于原位置已经改变不存在,那么服务器只会给用户返回404,这是不应该发生的。
因此出现了重定向操作,即当用户访问改变了位置的资源时,通过服务器的反馈得知资源位置已经改变,随即浏览器就会访问改变后的资源位置,而不会引发404。
这就是为什么会出现重定向。
5 何时会重定向?
至于何时会重定向,结合网上给出的,大致有以下几种情况:
域名更换(旧域名更换为新域名)
多域名跳转(多个域名跳转至主站,进行引流)
网站调整(如改变网页目录结构)
路径改变(如网页被移到一个新地址)
网页扩展名改变(如应用需要把.php改成.html或.shtml)
在这几中情况中,一般只有原路径或域名存在的情况下可能会使用到302,其余的都推荐使用301。
6 301和302的区别
通过上文已知,301和302都是重定向,但是有临时和永久的区别,
302虽然是重定向,但鉴于其实临时的,所以浏览器对于自己的URL缓存不会改变,依然是原路径。
在302重定向结束后,只需要删除相应的重定向相关代码即可恢复原状,用户点击收藏夹依然可以访问资源。
301是是永久的,所以浏览器会更改自身的URL缓存,将旧的路径换为新的路径。
在301重定向结束后,如果只删除重定向相关代码,客户端的URL缓存是不会改变的,因此用户点击收藏夹时,就会访问之前301时新的URL,但是该路径已经被删除换为旧的路径,因此用户得到的只会是404。
此时要想让用户可以正常访问,可通过以下几种方式:服务端再次301重定向,将改变后的地址重定向到原地址,这样更新了URL的用户再次点击时就会重新更新回原地址;
客户端清理浏览器缓存,这样就会把更新了的URL清除掉,点击收藏夹依然是旧的URL。
一般都是通过第一种方式,让服务端来进行相关操作。
而且,302的临时重定向不会将原搜索流量导入到新的地址,但是301会,这对于搜索排名有很大用处。
知道了两者的实际区别,那么如何选择也就视情况而定了,但是一般不推荐使用302,因为会有许多风险。
评论区