HTTP状态码中,301和302都是网页重定向跳转,但是两者的使用场景和效果是不一样的,不认真学习很容易搞混,下面我对自己学习的结果做简单总结。
我们先说301永久重定向。
301状态码是永久重定向(Moved Permanently),表示所请求的资源已经永久地转移到新的位置,这包含域名的改变或者是资源路径的改变。
抓取一个301重定向的数据包如下,内容如下:
使用Burp抓取,也可以看到Location字段,即重定向后的位置
对于301重定向的使用没有规定,即使很短时间的更换资源位置信息,也可以使用301重定向。
302状态码是临时重定向(Move Temporarily),表示所请求的资源临时地转移到新的位置,一般是24到48小时以内的转移会用到302。
对于302的使用是有规范的,只有在资源位置24到48小时内临时转移时,才可以使用302重定向,超过就必须使用301永久重定向。
虽然说短时间的资源位置转移会用到302临时重定向,但是并不提倡使用302,尽量使用301永久重定向, 因为302会有安全隐患,具体见下文。
在刚学习这部分内容时,就会有这样的疑问:为什么会出现重定向这个操作?
查询得知:
网站是会被大量用户收藏在自己的浏览器收藏夹的,当然收藏的是URL,即资源位置,当网站原资源路径发生改变时,如果不进行重定向操作,当用户再次访问收藏的资源时,由于原位置已经改变不存在,那么服务器只会给用户返回404,这是不应该发生的。
因此出现了重定向操作,即当用户访问改变了位置的资源时,通过服务器的反馈得知资源位置已经改变,随即浏览器就会访问改变后的资源位置,而不会引发404。
这就是为什么需要重定向。
至于何时会重定向,结合网上给出的,大致有以下几种情况:
在这几中情况中,一般只有原路径或域名存在的情况下可能会使用到302,其余的都推荐使用301。
通过上文已知,301和302都是重定向,但是有临时和永久的区别,可具体的区别呢?如何选择301或302?
对于区别,百科是这样解释的:
根据上述以及查询实践,我的理解是:
302虽然是重定向,但鉴于其实临时的,所以浏览器对于自己的URL缓存不会改变,依然是原路径。
在302重定向结束后,只需要删除相应的重定向相关代码即可恢复原状,用户点击收藏夹依然可以访问资源。
01是永久的,所以浏览器会更改自身的URL缓存,将旧的路径换为新的路径。
在301重定向结束后,如果只删除重定向相关代码,客户端的URL缓存是不会改变的,因此用户点击收藏夹时,就会访问之前301时新的URL,但是该路径已经被删除换为旧的路径,因此用户得到的只会是404。
此时要想让用户可以正常访问,可通过以下几种方式:
一般都是通过第一种方式,让服务端来进行相关操作。
而且,302的临时重定向不会将原搜索流量导入到新的地址,但是301会,这对于搜索排名有很大用处。
知道了两者的实际区别,那么如何选择也就视情况而定了,但是一般不推荐使用302,因为会有许多风险。
302的风险大致有以下几种:
对于301和302的学习暂时到此。
本文地址:https://blog.csdn.net/qq_43968080/article/details/107355758
如对本文有疑问, 点击进行留言回复!!
offset、client、scroll (width,height、left,top、X,Y)
网友评论