2

我最近偶然发现了多个谈话,声称您应该尽快开始响应任何传入的 HTTP 请求,这似乎是合理的,但我不清楚在使用这种策略时如何传达失败。

让我们想象一下我们发送响应代码 200 并开始渲染 HTML 页面的情况。当我们构建主体时,数据从各种 db 查询中流入,突然发生错误。在这个时候改变我们的想法为时已晚。

或者也许是一个更实际的例子:

我们提供的 API 可能会提供大量数据。为了保持快速,我们通过一些项目函数将数据从 DB 连接流式传输到流式 JSON 编码器中,该编码器直接写入套接字。噗,出事了。数据库连接中断,重新连接尝试超时。我们刚刚刷新了 100K JSON 对象,但结果集实际上比这更大。

有什么好的方法可以优雅地进入 HTTP 响应的一半吗?

在 HTML 的情况下,总是可以打印一些人类可读的信息。而在 API 中,once 可以用 响应{ "results": [ /* payload goes here */ ], "error": { /* error information */ } },这没关系,因为错误是在有效负载之后写入的。但理想情况下,我想使用 HTTP 协议中内置的东西。说 200 然后传递一个错误似乎很奇怪。有没有更好的办法?

4

2 回答 2

1

发送状态代码后,您唯一的选择就是关闭连接。

于 2013-10-15T20:47:09.310 回答
0

有什么好的方法可以优雅地进入 HTTP 响应的一半吗?

不,如果您将 http 状态刷新到客户端 - 无法更改它,因此唯一的方法是在服务器上完全生成输出,然后使用适当的 http 代码开始将其流式传输到客户端

注意 - 检查大 JSON 数据的 gzip 压缩

于 2013-10-15T18:26:27.110 回答