HTTP响应头可以不以状态行开头吗?

时间:2016-06-13 10:46:42

标签: c++ rest sockets http

我正在用C ++编写REST API,它响应文件请求。有时,我回复的文件需要一段时间来准备(需要解密)。在解密大文件时,套接字有时会超时,我的API永远无法响应任何内容。

请求系统在收到我的回复时不会超时。

所以我想发送一个初始响应头(哪一个?),然后才开始解密。然后将响应(从状态代码开始,然后是文件)发送到仍然打开的套接字。

这可能还是有更好的方法?

3 个答案:

答案 0 :(得分:1)

WebDAV(这是HTTP / 1.1协议的扩展)为此案例引入了special response code

  

10.1 102处理

     

102(处理)状态代码是用于执行的临时响应   告知客户端服务器已接受完整请求,
  但尚未完成。这个状态代码应该只发送   当服务器有合理的期望请求将是   花费大量时间完成。作为指导,如果采用一种方法   处理超过20秒(合理但任意的值)   服务器应该返回102(处理)响应。服务器必须   在请求完成后发送最终答复。

     

方法可能需要很长时间才能处理,
  特别是支持Depth标头的方法。在这种情况下   客户端可能会在等待响应时超时连接。为了
  防止这种情况,服务器可能会将102(处理)状态代码返回到
  向客户表明服务器仍在处理中   方法

答案 1 :(得分:0)

答案 2 :(得分:0)

不在HTTP协议本身的上下文中。 HTTP协议中没有这样的内容。

这样的事情通常是在更高层次上实施的。这通常由在后台启动长时间运行任务的原始请求完成,并返回临时"请等待..."类型的页面。该页面的javascript立即执行AJAX调用。在服务器上,AJAX调用等待适当的时间,通常是一分钟,以完成该过程。如果它仍在运行,则AJAX调用会相应地返回一个指示,并且客户端javascript会发出另一个调用。客户端javascript继续定期进行AJAX调用,等待后台进程完成。

最后,AJAX调用返回后台任务已完成的指示,此时客户端javascript执行HTTP请求以立即检索准备好检索的文档。