HTTP状态码200与202的区别

15

我有一个使用Python+requests编写的脚本。

脚本应该执行以下步骤:

  • 将文件发送到数据库;
  • 批准此文件(更改数据库中的文件状态);
  • 下载文件。

约束条件:

只有经过批准的文件才能下载

我的代码:

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:已接受表示服务器接受请求并返回状态码,但实际的请求尚未完成。

问题是:

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


据我所知,这是不可能的。Response.content 属性会阻塞,直到整个响应被下载完毕。 - user2393256
1个回答

24

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

202 接受

请求已被接受进行处理,但处理尚未完成。该请求可能最终会被执行或不执行,因为在实际处理时可能会被禁止。异步操作(例如此类操作)没有重新发送状态代码的功能。

202 响应故意保持中立。其目的是允许服务器接受对某个其他进程的请求(可能是一次每天只运行一次的批处理过程),而无需要求用户代理的连接保持到处理完成为止。应该使用此响应返回的实体包含请求当前状态的指示以及指向状态监视器或有关用户可以预期请求何时得到满足的估计。

如果响应主体为空,则检查响应标头应该会有更多信息。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接