我最近偶然发现多次会谈声称您应该尽快开始响应任何传入的HTTP请求,这似乎是合理的,但我不清楚在采用这种策略时如何沟通失败。
让我们想象一下我们发送响应代码为200并开始呈现HTML页面的情况。在构造主体时,数据从各种数据库查询流入,突然发生错误。现在改变主意还为时已晚。
或许是一个更实际的例子:
我们正在提供可能提供批次数据的API。为了保持快速,我们通过一些项目函数从数据库连接流式传输数据,然后流式传输到直接写入套接字的流式JSON编码器。噗,出了点问题。数据库连接中断,重新连接尝试超时。我们刚刚刷新了100K JSON对象,但结果集实际上要大于它。
有没有什么好方法可以优雅地在HTTP响应的一半处死?
在HTML案例中,人们总是可以打印一些人类可读的信息。在API中,一旦可以用{ "results": [ /* payload goes here */ ], "error": { /* error information */ } }
响应,这是好的,因为错误是在有效负载之后写入的。但理想情况下,我想使用HTTP协议中内置的东西。说200然后发出错误似乎很奇怪。还有更好的方法吗?
答案 0 :(得分:1)
发送状态代码后,您唯一的选择就是关闭连接。
答案 1 :(得分:0)
有没有什么好方法可以优雅地在HTTP中途退出 响应?
不,如果您将http状态刷新到客户端 - 则无法更改它,因此唯一的方法是在服务器上完全生成输出,然后使用正确的http代码开始将其流式传输到客户端
注意 - 检查大JSON数据的gzip压缩