205

301HTTP和308状态码有什么区别?

  • 301(永久移动):这个和所有未来的请求都应该被定向到给定的 URI。

  • 308(永久重定向):应使用另一个 URI 重复请求和所有未来的请求。

他们似乎很相似。

4

1 回答 1

370

的概述301302307

RFC 7231是 HTTP/1.1 协议的语义和内容的当前参考,定义了301(Moved Permanently) 和302(Found) 状态代码,允许将请求方法从 更改POSTGET。该规范还定义了307不允许将请求方法从 更改为 的(临时重定向)状态POST代码GET

请参阅下面的更多详细信息:

6.4.2. 301 永久搬家

( 301Moved Permanently) 状态码表示已为目标资源分配了一个新的永久 URI,并且将来对该资源的任何引用都应使用包含的 URI 之一。[...]

注意:由于历史原因,用户代理可以将请求方法从 更改POSTGET用于后续请求。如果不希望出现这种行为,则307可以使用(临时重定向)状态代码。

6.4.3. 302 找到

( 302Found) 状态码表示目标资源暂时驻留在不同的 URI 下。由于有时可能会更改重定向,因此客户端应该继续使用有效的请求 URI 来处理未来的请求。[...]

注意:由于历史原因,用户代理可以将请求方法从 更改POSTGET用于后续请求。如果不希望出现这种行为,则307可以使用(临时重定向)状态代码。

6.4.7. 307临时重定向

307临时重定向)状态码表示目标资源暂时驻留在不同的 URI 下,如果用户代理执行自动重定向到该 URI,则不得更改请求方法。由于重定向会随着时间而改变,客户端应该继续使用原始的有效请求 URI 来处理未来的请求。[...]

注意:此状态码与302(Found) 类似,只是它不允许将请求方法从 更改POSTGET。本规范没有为301(Moved Permanently)定义等效的对应项(然而,RFC 7238308 为此目的定义了状态代码(Permanent Redirect))。

需要308

已创建RFC 7238来定义308(Permanent Redirect) 状态代码,它类似于301(Moved Permanently) 但不允许将请求方法从 更改POSTGET

状态代码现在308RFC 7538定义(已废弃RFC 7238)。

3. 308永久重定向

( 308Permanent Redirect) 状态码表示已为目标资源分配了一个新的永久 URI,并且将来对该资源的任何引用都应使用包含的 URI 之一。如果可能,具有链接编辑功能的客户端应该自动将对有效请求 URI 的引用重新链接到服务器发送的一个或多个新引用。[...]

注意:此状态码与301(Moved Permanently) 类似,只是它不允许将请求方法从 更改 POSTGET

我们有以下内容:

                                                             +-----------+-----------+
                                                             | Permanent | Temporary |
+------------------------------------------------------------+-----------+-----------+
| Allows changing the request method from POST to GET        | 301       | 302       |
+------------------------------------------------------------+-----------+-----------+
| Doesn't allow changing the request method from POST to GET | 308       | 307       |
+------------------------------------------------------------+-----------+-----------+

选择最合适的状态码

Michael Kropat整理了一组决策图表,有助于确定每种情况的最佳状态代码。请参阅以下内容2xx3xx状态代码:

选择 2xx 或 3xx 状态码

于 2017-02-09T14:02:33.870 回答