为什么要使用multipart/form-data而不是application/octet-stream?

3

我不清楚它们是什么,也不知道何时使用它们。

例如,我有一个REST客户端,想要发送一个文件(.zip文件),如果我使用以下任何一种类型,会发生什么?

  • application/octet-stream 我猜等同于 application/zip,只是为了向另一侧提供有关传输数据的提示,文件以某种方式被编码。
  • multipart/form-data 以某种方式将数据拆分,并且可以传递具有特定mime类型的“多个数据”,文件以某种方式编码,并且作为多部分请求的一部分。在这种情况下,我不确定如何告诉Feign客户端请求成为具有该确切部分的octet-stream的多部分请求。

但是,如果我只想发送一个文件,那么multipart到底能为我提供octet-stream没有的东西呢?

在两种请求中,整个文件都以某种方式被编码,对吧?处理过程有何不同。我看不出任何优势。为什么Feign客户端教程要使用multipart,还是说这是常见做法?

此外,我发现您还需要在服务器中启用整个multipart马戏团才能接收它。那么这有什么意义呢?

1个回答

1
过去,我使用application/zipapplication/octet-stream来处理.zip文件。对于您的情况,这两个标头都可以正常工作。
根据另一位评论者所说:
“多部分是用于在单个HTTP请求中发送多个部分(例如表单字段和某些文件),并指定文件名和编码。它不会将大型文件分成多个部分。一个文件仍然只是多部分请求中的一个部分。 HTTP标题也可以包含在两种情况下。”
以下线程可能还提供更多上下文: 多部分表单数据 URL编码的多部分表单数据

1
但我不明白为什么多部分能处理更大的数据。我会检查规范以了解是否存在任何限制。那效率呢?两者是否相等?多部分中是否有流式传输机制? - Zveratko
是的,没错。你可以使用multipart来上传单个文件。multipart通常在HTML表单中被用于同时提交文件和除文件之外的其他信息。优点是,如果文件非常大,multipart会更有效地处理请求。然而,如果文件很小或者你只是提交一个文件而没有额外的信息,octet-stream更有效率,因为它需要做的工作更少。 - CEH
1
对于REST API来说,这种推理是不合适的。在我的情况下,将保持八位字节流。 - Zveratko
1
这听起来像是正确的方法,multipart通常用于HTML Web开发人员接受表单输入的上下文。如果我的答案和讨论对您有帮助,欢迎接受此答案。 - CEH
Multipart 用于在一个单一的 HTTP 请求中发送多个部分(例如表单字段和一些文件),指定文件名和编码。它不会将大型文件分成几部分。在 multipart 请求中,一个文件仍然只是一个部分。HTTP 头可以在这两种情况下被包含。 - TimTIM Wong
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接