文件上传 API:Multipart/form-data 与 body 中的原始内容?

File upload API: Multipart/form-data vs. raw contents in body?

我注意到有(至少)两种通过 API 将文件上传到 HTTP 服务器的方法。

您可以使用 multipart/form-data(这是浏览器本机用于文件上传 HTML 输入),但您也可以 POST 请求中的文件内容 body(也许有正确的 Content-Type 请求 header)。

每种方法的优缺点是什么(总的来说,不是来自浏览器)?

例如,多部分请求——取决于你在编程环境中使用的 http 或网络库(我在服务器端使用 Node.js,在客户端使用 Swift)——似乎是创建然后解析有点复杂。

协议级别的唯一区别是 multipart/form-data 请求必须遵守 RFC 2388 而自定义类型的请求 body 可以是任意的。

这意味着 multipart/form-data 请求通常更大:虽然客户端在技术上允许使用非 7 位 content-transfer-encoding,但大多数人使用 base64。 MIME headers 会产生额外的开销,如果上传许多小文件,这可能会成为瓶颈。请注意,现有 clients/libraries 中对 multipart/form-data 文件上传的支持更为广泛。如果您对客户端和中间主机(代理服务器)的功能集没有足够的把握,您应该始终提供它作为后备。尤其要记住,如果您正在为第三方设计 API,那么其他开发人员应该已经熟悉 multipart/form-data 并且手头有库可以使用它。