文件上传API:多部分/表单数据与正文中的原始内容?

jul*_*n_c 6 upload file-upload http

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

您可以使用multipart/form-data(这是浏览器本身用于文件上载HTML输入的内容),但您也可以POST使用请求正文中的文件内容(可能具有正确的Content-Type请求标头).

每种方法的优缺点是什么(一般而言,不是来自浏览器)?

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

Phi*_*lip 10

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

这样做的实际意义是multipart/form-data请求通常更大:虽然技术上允许客户端使用非7位content-transfer-encoding,但大多数人都使用base64.如果上传了许多小文件,MIME标头会产生额外的开销,成为瓶颈.请注意,multipart/form-data现有客户端/库中对文件上载的支持要广泛得多.如果您不完全确定客户端和中间主机(代理服务器)的功能集,则应始终将其作为后备提供.特别要记住的是,如果您正在为其他开发人员已经熟悉的第三方设计API,multipart/form-data并且手头有库可以使用它.