0

我想要以下内容:

  • 通过 HTTP 将一个(可能很大的)文件流式传输到客户端,并且文件已经完全流式传输到客户端之后(可能)向客户端发出错误信号(例如 404 未找到或 500 内部服务器错误)。

在 HTTP 1.x 中这似乎是不可能的:错误在标头中发出信号,这些标头在正文之前流式传输。

也许,在 HTTP/2 中是可能的?如何?

我可以只是中断 HTTP TCP 连接,但在这种情况下,客户端可能会认为错误不是 404 或 500(在我的情况下,这意味着需要由客户端清除的错误文件内容)而是部分下载的文件和下次可能会尝试使用Range:将更多数据附加到(不正确的)下载数据中。

我知道这可以通过创建我自己的文件格式来完成,但我想按原样将文件传递给客户端并使用标准HTTP 错误。

4

1 回答 1

0

我找到了部分解决方案:

开始第一次流式传输时,返回:

203 Non-Authoritative Information
...
Warning: 110 - "Response is Stale"
Expires: 0

或者

203 Non-Authoritative Information
...
Warning: 111 - "Revalidation Failed"
Expires: 0

(应该是 110 还是 111?)

然后在我的缓存返回的后续流中

304 Not Modified
...

(到我的下游代理)如果没有校验和错误,或者只是从缓存中再次流式传输。

因此,代理将向浏览器提供一些文档,表明它在第一次尝试时已过期,如果出现错误,则在第二次尝试时重新下载。

于 2021-10-28T03:31:50.633 回答