代码之家  ›  专栏  ›  技术社区  ›  Charles L.

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

  •  4
  • Charles L.  · 技术社区  · 8 年前

    我有一个go服务器正在读取&返回绑定到tar中的大型数据文件。我已经测试过这是否有效;将tar分块写入,当所有数据加载时,一切正常。

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

    我正在使用以下curl命令:

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

    2 回复  |  直到 8 年前
        1
  •  5
  •   regilero    8 年前

    如果下载已经开始,则所有HTTP头都已发送到HTTP客户端。你 (它在第一行)。

    你唯一能做的就是切断tcp/ip连接。如果使用“内容长度”标题,客户端将看到传输未完成。如果使用“传输编码:分块”,客户端将看到未接收到块结束标记。在所有情况下,这将使整个转让无效。

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

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

        2
  •  0
  •   Most Noble Rabbit    4 年前

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

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