![](/img/trans.png)
[英]When should I return HTTP Status Code 500 (Internal Server Error) from REST application to client?
[英]Which HTTP status should I return if the client tries to upload a new file while server is still processing the previous one?
我的应用程序有一个允许用户上传文件的按钮。 上传文件非常快,我们非常快地向客户端发送响应,但是服务需要一段时间来处理它。
只有当前一个文件已经处理完毕时,用户才能上传一个新文件。 因此,如果用户在服务器仍在处理文件时尝试上传文件,我们应该向客户端返回错误。
我的问题是我应该使用哪种 HTTP 响应状态? 我检查了所有选项,这些是我认为更接近我的情况的选项:
你认为哪一个最适合这种情况? 或者其中任何一个,我应该使用另一个吗?
你认为哪一个最适合这种情况?
429 状态码表示用户在给定时间内发送了太多请求(“速率限制”)。
响应表示应该包含解释条件的详细信息,并且可以包含一个 Retry-After 标头,指示在发出新请求之前要等待多长时间。
429 Too Many Requests
Retry-After: 60
Content-Type: text/plain
Why don't you wait a minute?
为什么我不提倡您推荐的任何代码:
425 太早了; 我会避免这个,因为它似乎特定于早期数据的上下文。
428 需要先决条件; 这里的核心问题是如何与通用客户端进行通信,请求中应包含哪个先决条件。 此外,从语义上讲,它有点偏离。
409 冲突; 在实践中,您也许可以使这一项工作。 从语义上讲,困难在于客户端确实没有办法解决冲突(例如:重新加载页面以获取服务器资源副本的新副本)。
需要认识到的重要一点是,HTTP 状态代码只是对人类来说是偶然的。 状态码是网络文档传输域的元数据; 目标受众是通用 HTTP 组件(浏览器、蜘蛛、缓存、代理等)。
因此,要使用的“最佳”代码将是告诉通用组件正确事情的代码。 专业化发生在响应正文中,我们使用有效负载来传达细粒度的细节。
您如何接收请求并将其放入队列中。 为您的队列创建一个消费者,以便在前一个完成之前无法处理任何请求。 这样,无论当前状态如何,您都可以只接受来自客户的请求,并且只返回一个标准的确认响应 - 200 或您在成功时发送的任何响应。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.