HTTP状态码308是怎么回事?

Posted

技术标签:

【中文标题】HTTP状态码308是怎么回事?【英文标题】:What's the deal with HTTP status code 308? 【发布时间】:2012-12-18 03:43:14 【问题描述】:

IETF RFC 草案 The Hypertext Transfer Protocol (HTTP) Status Code 308 (Permanent Redirect) 将 HTTP 状态 308 定义为 永久重定向。当然,应该注意的是,这是一份草稿文件,在其文件标题中包含文本“过期:2012 年 9 月 27 日”,我认为这意味着它现在应该被视为无效,但我不熟悉IETF 的流程,因此对此没有信心。

***文章List of HTTP status codes 也使用了 308 的这个定义:

308 永久重定向(批准为实验性RFC)[12]

该请求以及所有未来的请求都应使用另一个 URI 重复。 307 和 308(如提议的那样)与 302 和 301 的行为平行,但不允许更改 HTTP 方法。因此,例如,将表单提交到永久重定向的资源可能会顺利进行。

...

[12]:"The Hypertext Transfer Protocol (HTTP) Status Code 308 (Permanent Redirect)"。 IETF。 2012 年。2012 年 3 月 27 日检索。

当时 Microsoft 的 Eric Law 在Pushing the Web Forward with HTTP/308 中使用了这个 HTTP/308 代码。这让我发现火狐在这个意义上支持308。

但是,我在查看python-requests库的时候,发现308还有另一种用法:

    308: ('resume_incomplete', 'resume'),

这似乎来自 Google Gears resumable HTTP requests proposal,定义为 308 Resume Incomplete。似乎有一些用法。当然,这两个提案都不承认另一个的存在。

那么发生了什么? 308 Permanent Redirect 还活着吗?状态码 308 发生了什么?我该怎么办?

【问题讨论】:

您是在问,从服务器的角度来看,您是否应该发出 308(如果是,在什么情况下),或者从消费者的角度来看,您应该如何对 308 做出反应 @Damien_The_Unbeliever:问题主要是想知道它发生了什么,它是否有意义,可以我合理地使用它。在我的特殊情况下,我正在处理客户的观点,希望为未来做好准备并正确实施这个和相关的问题,但我也在寻求更多的一般信息来尝试收集它 - 没有太多关于它在网络上。 【参考方案1】:

互联网草案尚未过期(因为它在过期之前已获得批准)。有关当前发布状态,请参阅 https://datatracker.ietf.org/doc/draft-reschke-http-status-308/ 和 http://www.rfc-editor.org/queue2.html#draft-reschke-http-status-308。

【讨论】:

这意味着它已被批准,但正在等待编辑处理?与此同时,这意味着 308 是什么意思?将其用作永久重定向将是“无效的”?那么,被批准为实验性 RFC 究竟意味着什么? 已批准,为注册状态码。只是 RFC 在它引用的其他文档发布之前不会发布。【参考方案2】:

请参阅下面关于此问题的 Chris Morgan 评论(我的原始答案提到了 http://insanecoding.blogspot.co.il/2014/02/http-308-incompetence-expected.html?m=1,但 Chris 的参考要好得多)。

只是为了了解 308 还没有走多远,请参阅 Microsoft 的 .NET 框架 V4 (http://msdn.microsoft.com/en-us/library/system.net.httpstatuscode(v=vs.110).aspx HttpStatusCode 枚举) 中定义的 HTTP 代码。具体来说,没有提及代码 308。

【讨论】:

news.ycombinator.com/item?id=7249193 对文章有很好的评价——文章的意思很好,但它本身并不了解全部情况。 307 现在在您链接到的 msdn 文章中,但仍然不是 308

以上是关于HTTP状态码308是怎么回事?的主要内容,如果未能解决你的问题,请参考以下文章

HTTP常见状态码

http状态返回代码代码400是怎么回事?

HTTP 2 中是不是引入了 HTTP 状态代码 308(“永久重定向”)?

如何才能获取到http的响应状态码

Spring Boot 返回自定义 HTTP 状态码

http状态码解释