Things I Learned (HTTP)

HTTP Status 301 & 308🔗

HTTP

在 HTTP 协议中,301 Moved Permanently 和 308 Permanent Redirect 在语意上是一致的,都表示一个资源已经被永久性地转移到了一个新的地址(这一点和 302 / 307 对应,后者只是资源的地址被临时修改了)。在这种情况下,浏览器会跳转到新的资源地址,SEO 也会更新资源对应的数据信息。

虽然 301 和 308 的语意是一致的,但是在实际的浏览器行为上,会有少许差别。根据 RFC7231 中的表述,因为一些历史原因,客户端有可能会将 301 重定向的请求方法从 POST 修改为 GET。而根据 RFC7238 中的定义,308 重定向是不允许客户端对请求方法进行修改的。

这里 302 和 307 的区别也是同理。整体的区别见下表:

是否允许改变请求方法 永久重定向 临时重定向
允许 301 302
不允许 308 307