HTTP部分上传,恢复上传的标准方法

Анд*_*чёв 15 upload http

我正在开发http客户端/服务器框架,并寻找处理部分上传的正确方法(与使用带有Range标头的GET方法的下载相同).

但是,HTTP PUT不打算恢复.我知道,PATCH方法不接受Range标头.

有没有办法通过HTTP标准处理这个(不使用扩展标题或其他)?

提前致谢.

Ste*_*ich 12

我认为部分上传没有标准:

  • RFC2616(http)中未明确禁止内容范围内的请求,但是措辞也将其称为响应标头,用于响应范围请求
  • 虽然您可以使用PATCH方法更新现有资源(例如,添加更多字节),但它与部分上载不同,因为不完整资源一直可用

如果你看一下Dropbox,谷歌驱动器等的协议,他们都会推出自己的协议,以便在多个块中传输单个文件.恢复上传所需的是

  • 解决不完整上传的方法.普通URL可以处理完整的资源,而不是部分资源,我知道部分资源没有标准.
  • 一种查找上载当前状态的方法,也可能是部件的校验和,以确保本地文件没有改变.这可以通过WebDAV PROPFIND方法提供(一旦你能够解决不完整的资源:)
  • 一种上传块的方法.这里可以使用PATCH和内容范围标题.mod_dav似乎允许PUT使用内容范围标题(参见http://www.gossamer-threads.com/lists/apache/users/432346)
  • 一种完成后发布资源的方法,或者预先定义完整资源的方法(例如资源大小,校验和......)

  • 有http://tus.io/"基于HTTP的可恢复上传的新开放协议" (3认同)
  • 不幸的是,HTTP 规范现在明确禁止在 PUT 请求中显式使用 Contant-Range 标头,这本来是最简单、最干净的解决方案。 (2认同)

aww*_*ght 6

PATCH 将是选择可恢复上传的逻辑方法:它需要指示如何更改目标资源的媒体类型。虽然没有具体定义为执行修补的格式,multipart/byteranges但指定了字节范围和该范围的内容,使其适合 PATCH 有效负载的良好定义。

\n

例子:

\n
PATCH /document HTTP/1.1\nContent-Type: multipart/byteranges; boundary=THIS_STRING_SEPARATES\n\n--THIS_STRING_SEPARATES\nContent-Type: text/plain\nContent-Range: bytes 10-21/22\n\n1234567890\n--THIS_STRING_SEPARATES--\n
Run Code Online (Sandbox Code Playgroud)\n

此示例以十字节偏移量上传十二个字节。THIS_STRING_SEPARATES是一个任意的、用户选择的分隔符,并且应该是随机生成的。为了简洁起见,省略了一些标题,每行以 \xe2\x90\x8d\xe2\x90\x8a 结尾。

\n