凉山特产网 加入收藏  -  设为首页
您的位置:梁山特产网 > 知识百科 > 正文
http 状态码301、302、303、307、308 的区别
http 状态码301、302、303、307、308 的区别
提示:

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

3xx开头的状态码都表示重定向。

先说明一些版本问题, 301和302都是http1.0就定义好的,303、307、308都是在http1.1中才新增的状态码。

默认情况下,永久重定向是会被浏览器缓存的。

在浏览器的实现中,302默认以get重新发出请求。比如 以post访问 a.com ,用302重定向到b.com,浏览器会使用get请求b.com。但这样就会导致之前的post请求数据丢失,相对的 307不允许修改请求方法,这也是302和307最大的区别

在 rfc1945 中规定:

这段英文大意:如果对post请求返回了302状态码, 在未经用户确认的情况下不允许擅自发送请求,因为可能会修改请求条件。

在post数据量大的情况下从post改为get,肯定会丢失很多参数。但是很多浏览器都是以get方式重定向的,所以在后来的 rfc7231 中取消了这一段强制要求,并将此要求放在了307状态码中。

303 是为了区分302而存在的。

这个状态码和302相似,有一个唯一的区别是不允许将请求方法从post改为get。

在 rfc7231 的原话如下:

rfc7538 新增的状态码

308是307的永久版本,和307是一对

永久重定向有两个: 301和308。
两者都默认缓存,
但是308不允许将请求方法从POST修改到GET, 301允许。

临时重定向三个:302,303,307
303强制浏览器可以将请求方法从POST修改到GET
307不允许浏览器修改请求方法。
302一开始的标准是不允许修改POST方法,但是浏览器的实现不遵循标准,标准就向现实妥协而做了修改。

另外,关于默认缓存的响应头:

参考
HTTP中的301、302、303、307、308
知乎:HTTP 中的 301、302、303、307、308 响应状态码 (这一篇总结的比较好)
rfc7231 文档
rfc7538 文档
维基百科 303 (我发现中文版和英文版内容不一样,中文版可能过期了,建议看英文版。)
《http 权威指南》

http站点跳转到https应该使用什么状态码?301?302
提示:

http站点跳转到https应该使用什么状态码?301?302

在将HTTP站点跳转到HTTPS站点时,应该使用301状态码,而不是302状态码。
301状态码表示永久性重定向,告诉搜索引擎和浏览器这个页面已经永久性地移动到了一个新的位置,建议将原有网址更新为新的网址。这对于SEO优化和搜索引擎排名非常重要,因为搜索引擎会将原有网址的权重和链接转移到新的网址上。
而302状态码则表示临时性重定向,告诉搜索引擎和浏览器这个页面只是暂时性地移动到了一个新的位置,原有网址仍然有效。这种情况下,搜索引擎不会将原有网址的权重和链接转移到新的网址上,可能会对SEO优化和搜索引擎排名产生负面影响。
因此,在将HTTP站点跳转到HTTPS站点时,应该使用301状态码,以确保搜索引擎和浏览器能够正确地将原有网址的权重和链接转移到新的网址上,同时避免对SEO优化和搜索引擎排名产生负面影响。