301、302、303、307 和 308 重定向状态码的区别
目录
HTTP 重定向是指引导访问者(用户或者爬虫机器人)从一个 URL 到另一个 URL 的方式。
常用的为 301 和 302 状态码 ,分别指永久重定向和临时重定向;
与之对应的 308 和 307 状态码 则会重复相同请求(例如原 URL 是 POST 请求,重定向后还是 POST 请求 ) 。
永久重定向 301 308 #
永久重定向用于当一个资源被永久的迁移到新的 URL的情况,用于 http 转 https,或者更换域名等情况。
区别在于,如果浏览器收到 308 重定向,它必须在新的 URL 上重复完全相同的请求, 而浏览器可能会在收到 301 重定向的情况下,将 POST 请求更改为 GET 请求。
308 目前的问题是比较新(在 2015 年 4 月的 RFC 7538中引入),并非所有浏览器支持。
临时重定向:302/303 307 #
临时重定向用于当一个资源被临时的迁移到新的 URL的情况,例如网站临时跳转到维护页面等情况。
302 和 303 会在新 URL 上发出 GET 请求。
307 会让浏览器在另一个 URL 重复相同请求,使用和原始请求相同的请求方法。
HTTP/1.0 规范(1996 年发布)仅包含用于临时重定向的状态码 302
因大多数浏览器忽略了该标准并始终对重定向 URL 执行 GET,所以在 HTTP/1.1 规范(1999 年发布)引入状态码 303 和 307 以明确浏览器应该如何反应的原因。
SEO 和注意点 #
当 Google 看到永久的 301 或 308 重定向时,它会从索引中删除旧页面,并将其替换为来自新位置的页面。
Google 或会忽略临时重定向(状态代码 302、303 和 307)。搜索引擎知道重定向只是暂时性的,并保持原始页面的索引状态,而不会替换其原始 URL。
值得注意的是,每次重定向都需要向服务器发送一个额外的 HTTP 请求,通常会增加数百毫秒的页面加载时间。
https://www.drlinkcheck.com/blog/http-redirects-301-302-303-307-308