通过http流式传输大型二进制文件时的HTTP错误代码?

时间:2016-10-25 23:34:50

标签: http curl streaming http-status-codes

我有一台正在阅读的服务器返回捆绑到tar中的大型数据文件。我已经测试过这个有用了吗?将tar写成碎片,当所有数据加载时,它都很好。

问题是可能存在意外错误导致下载中断。我目前正在写一个HTTP错误代码&错误消息,但错误消息只是放在流/文件的末尾。是否有一种很好的方式来表明出口中途失败了?是否可以使用HTTP状态代码&还提供错误消息?

我使用以下curl命令:

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

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

2 个答案:

答案 0 :(得分:2)

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

你唯一能做的就是削减tcp / ip连接。如果您使用了“内容长度”'标题客户端将看到转移不完整。如果您使用了'转移编码:chunked'客户端将看到未收到块结束标记。在所有情况下,这将使整个转移无效。

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

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

答案 1 :(得分:-1)

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

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