http1.1 中是否有任何内容表明我无法在请求的 body 发送完成之前发送响应?

Is there anything in http1.1 that says I can't send the response before the body of the request is done being sent?

在 http2 中,您可以发送 header 响应 'before' 请求的 body 已完全发送。当然,您随后必须处理发送 http 200 OK 响应以及随后的失败。这对我们来说很好。我想知道对于 ndjson 的流式上传案例,我们是否可以这样做。在流完全发送之前发回响应。

即。 1.收到http1.1请求 2. 我们进行身份验证,如果成功,我们会在他们发送请求 body 时发回 http 200 OK 3. 当我们处理 ndjson 流时,每条记录,我们都会返回成功或失败,以便他们可以轻松地从中断的地方继续

然后,此解决方案允许他们发送 1 条记录或任意数量的记录。我知道我们的网络服务器支持这一点,但不确定那里的所有客户端。我很好奇规范中是否有任何内容表明这违反了规范?

谢谢, 院长

读取请求内容之前发送响应头在HTTP/1.1中也是可能的。

事实上,从历史上看,这在 HTTP/1.1 中一直是可能的,而 HTTP/2 刚刚从其前身继承了这种行为。

一个典型的情况是当服务器应用程序产生意外错误时(例如,在Java,一个NullPointerException):服务器应用程序无法读取客户端仍在发送的请求内容(由于意外错误),服务器通常会产生一个响应 500,表明它想要关闭连接。

另一种典型情况是回显或转换服务器,您在其中上传一些内容,这些内容会即时回显或转换并发送回客户端。

代理是 HTTP 是全双工这一事实的主要示例 - 代理在将请求内容发送到服务器之前不会缓冲请求内容,如果服务器在代理发送请求时回复,则代理会也不缓冲响应内容(等待请求完成)- 它只是将响应内容发送给客户端。

虽然规范中没有明确说明这种全双工行为,但它显然在现实生活中发生,因此客户端和服务器都应该妥善处理这种情况。

如果我理解正确,您在 HTTP 之上使用 JSON 协议来通知客户端服务器已处理的每个 JSON 块。 您基本上有一个 "long" 请求和一个 "long" 响应,这在任何体面的 HTTP 实现中都应该工作得很好。