【发布时间】:2021-12-13 06:39:41
【问题描述】:
我想要以下:
- 通过 HTTP 将(可能很大的)文件流式传输到客户端,并且在文件已经完全流式传输到客户端(可能)向客户端发出错误信号(例如 404 未找到或 500 内部服务器错误)。
在 HTTP 1.x 中这似乎是不可能的:错误在标头中发出信号,这些标头在正文之前流式传输。
也许,在 HTTP/2 中是可能的?怎么样?
我可以只是中断 HTTP TCP 连接,但在这种情况下,客户端可能会认为错误不是 404 或 500(在我的情况下,这意味着需要由客户端清除的错误文件内容)而是部分下载的文件,下次可能会尝试使用Range: 将更多数据附加到(不正确的)下载数据中。
我知道这可以通过创建我自己的文件格式来完成,但我想将文件按原样交付给客户端并使用 标准 HTTP 错误。
【问题讨论】:
-
那是因为我通过校验和知道数据是否正确,校验和只能在流式传输完成后计算。
-
如果校验和失败,我想中断当前的流并重新开始流,理想情况下客户端不做任何“自定义”,例如我可以使用发送到客户端的 HTTP 重定向(到相同的 URL?) 流式传输失败。
-
也许可以在 TCP 级别重新流式传输?这可能是对 TCP 标准的一个很好的补充,但如果滥用它可能会增加网络负载......
-
...还是不加。
标签: http tcp http2 false-positive http3