HTTP状态码301302的区别
Posted wen_rc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP状态码301302的区别相关的知识,希望对你有一定的参考价值。
301与302的区别
参考资料:
https://blog.csdn.net/zhouchangshun_666/article/details/79354193
https://www.cnblogs.com/cswuyg/p/3871976.html
301,永久重定向。
302,暂时重定向。
重定向就是你发送一个请求,服务器返回30x状态码,然后把新的地址放在Response的Location字段,浏览器会自动请求Location字段的url。
比如你在地址栏输入http://www.baidu.com/
,会收到307返回码,浏览器会自动请求到https://www.baidu.com/
那这里的307又是什么鬼,其实307跟302很像,但是307不会把POST请求转为GET请求。这里转请求是个什么鬼?原来浏览器在收到302响应后,如果请求是POST,那么重定向的请求会转为GET,虽然规定不是这么说,但似乎浏览器就说这么做的。规定说如果是非GET、HEAD请求,需要找用户重新确认,因为可能环境已经发生改变。
If the 302 status code is received in response to a request other
than GET or HEAD, the user agent MUST NOT automatically redirect the
request unless it can be confirmed by the user, since this might
change the conditions under which the request was issued.
https://tools.ietf.org/html/rfc2616#section-10.3.3
当然,我们直接访问http://www.baidu.com/
,肯定是GET请求了,所以是直接重新请求到https://www.baidu.com/
的,不管状态码是302还是307.
这时候又有疑惑了,重定向就重定向,为什么要区分永久和暂时?而且为什么要重定向呀?
-
为什么要重定向?
考虑以下场景,用户把你的网站加到自己的书签里了,然后你的网站发下以下事件:- 你们做了个重构,目录架构换了(这个重构兼容性没做好,但也可能是之前设计太糟糕,这是必要调整)
- 这个页面被删掉了,但你不想用户访问这个页面是404
- 你做动态网页了,html后缀改为php
这时候如果没有重定向,用户可能以为你的网站倒闭了。
-
为什么要区分永久重定向和暂时重定向?
网上好像是从搜索引擎角度区分的。- 从网站建设者角度,用301会告诉搜索引擎,旧域名不用,可以把搜索权重交给新域名了(不然新域名可能要过很久才会被搜索引擎排到前面)。如果你用302,搜索引擎可能会认为你把多个域名指向同一个网站,干扰排名,会封掉你。
- 为什么多个域名指向同一网站就封你呢? 从搜索引擎角度,假设A网站比较短,没有太多参数,比较好看,但A网址302到B网址,B网址域名复杂,各种参数不好看,那搜索引擎在显示搜索结果时,可能会选择显示A网址,内容却是跳转到B的内容,假设B网址都是优质内容,但是他的优质内容都给A网址做搜索优化贡献了,这就不公平,搜索引擎又不能舍弃显示看起来好看的网址这一条件(可能一般网址好看的是好网站?),只能去打击这种行为了。
不知道从书签的角度,如果浏览器发现301了,会不会把书签的网址更新下?
以上是关于HTTP状态码301302的区别的主要内容,如果未能解决你的问题,请参考以下文章