HTTP状态码200 vs 202

问题描述:

我有一个Python + requests脚本。HTTP状态码200 vs 202

的步骤,脚本应该执行

  • 将文件发送到DB;
  • 批准此文件(在DB中更改文件状态);
  • 下载文件。

约束

只批准文件可以下载

我的代码

requests.post(url_to_create, files={"file": open(path_to_file)}) 
requests.post(url_to_approve, data={'id': file_id}) 
requests.get(url_to_download, data={'id': file_id}) 

问题

此代码几乎完美工作,但有时我没有得到任何文件。我发现第一个和第三个请求返回200状态码,而第二个请求返回202。据我所知,(告诉我,如果我错了)的状态202: Accepted意味着服务器接受请求,并没有实际的请求完成

问题返回状态代码:

这是否意味着下载请求,即使可以发送请求批准尚未完成,如果是这样,如何在发送下载请求之前等待批准请求完成?

+0

据我所知这应该是不可能的。 Response.content属性将会阻塞,直到整个响应被下载。 – user2393256

这取决于你的服务器实现,你的服务器决定如何处理202

202接受

的请求已被接受处理,但是处理还 尚未完成。该请求最终可能会或可能不会被执行,因为在处理实际发生时它可能是不允许的。 没有工具可以像这样从异步操作中重新发送状态码。

202响应是故意不提交的。它的目的是让 允许服务器接受一些其他进程的请求(可能是一个 面向批处理的进程,每天只运行一次),而不要求 要求用户代理与服务器的连接一直持续到该进程完成的 。返回的响应实体 应该包括请求当前状态的指示和 或者指向状态监视器的指针,或者用户可以期望满足请求的一些估计。

如果响应正文为空,检查应该有附加信息的响应头是有意义的。

参考 - https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html