【问题标题】:HTTP error codes when streaming large binary files over http?通过http流式传输大型二进制文件时的HTTP错误代码?
【发布时间】:2017-03-08 04:17:15
【问题描述】:

我有一个 go 服务器,它正在读取并返回捆绑到 tar 中的大型数据文件。我已经测试过它可以工作并分段写入 tar,当所有数据加载时,一切都很好。

问题是可能会出现中断下载的意外错误。我目前编写了一个 HTTP 错误代码和一条错误消息,但错误消息只是放在流/文件的末尾。有没有一种很好的方式来传达出口在中途失败的情况?是否可以使用 HTTP 状态代码并提供错误消息来执行此操作?

我正在使用以下 curl 命令:

curl --insecure https://127.0.0.1/api/export/030e28f3-4ab6-446a-852e-fda0a497ffe2 -o "test.tar"

我是否也必须更改 curl 命令来检测错误?

【问题讨论】:

    标签: http curl streaming http-status-codes


    【解决方案1】:

    如果你控制了客户端,你可以添加一个HTTP响应尾标头来指示错误,然后在客户端进行处理。

    有关响应尾标头的更多信息: https://developer.mozilla.org/enUS/docs/Web/HTTP/Headers/Trailer

    【讨论】:

      【解决方案2】:

      如果下载已经开始,那么所有的 HTTP 标头都已经发送到 HTTP 客户端。您不能再重写状态码(它在第一行)。

      你唯一能做的就是切断 tcp/ip 连接。如果您使用“Content-Length”标头,客户端将看到传输不完整。如果您使用“Transfer-Encoding: chunked”,客户端将看到未收到块结束标记。在所有情况下,这都会使整个转移无效。

      您可以尝试范围请求部分内容响应,并在多个 HTTP 请求-响应对话框中发送内容。但是,如果您通过单个 HTTP 对话框管理大文件传输,那么您唯一能做的就是中断传输,然后完全重新启动它。

      通常在应用层上管理大块的大文件传输,在 HTTP 之上。就像在上传的情况下,javascript 东西会将文件分解成块,并将其发送回专用的应用程序服务器,重建文件,并在 http 之上使用专用协议来请求丢失的部分。这是因为在 现实生活 狂野的 HTTP 环境中,长传输是困难的,并且范围/部分内容传输不能由所有潜在代理很好地管理。另一方面,使用简单的中等大小的 HTTP 请求几乎可以在任何地方使用。因此,如果您同时控制客户端和服务器端,您可以在 HTTP 之上构建自己的对话框,并制作自己的分块传输协议,并具有良好的错误管理。

      【讨论】:

        猜你喜欢
        • 2010-09-25
        • 1970-01-01
        • 1970-01-01
        • 2017-10-27
        • 1970-01-01
        • 2018-03-06
        • 2018-03-27
        • 2017-05-07
        • 1970-01-01
        相关资源
        最近更新 更多