Oasis's Cloud

一个人的首要责任,就是要有雄心。雄心是一种高尚的激情,它可以采取多种合理的形式。
—— 《一个数学家的辩白》

Http Multipart 介绍


原文地址:https://blog.adamchalmers.com/multipart/

为什么使用 multipart

multipart 是什么

MIME 类型又叫做媒体类型,用于指示文档、文件或字节分类的性质和格式。可以在 https://datatracker.ietf.org/doc/html/rfc6838 找到它的定义。

MIME 类型通常由两部分构成:类型和子类型。 type/subtype 例如:

text/plain
text/html
text/javascript

MIME 类型分为两类: - 离散类型(Discrete type) - Multipart

离散类型标识一个文件或媒体的类型。multipart 标识由多个部分组成的文档。每个部分都有自己的 MIME。

Multipart 类型分为两种: - message - multipart

Multipart 怎么实现

如果 Content-Typemultipart/form-data 则 HTTP 正文包含 Multipart。每个部分都有边界限定符分隔。HTTP 消息有一个标头,它定义了边界限定符,这样服务器就能知道每个部分之间的边界在哪里。每个部分也有自己的 header :

Content-Disposition: 定义文件名或表单字段名

Content-Type: 每个 part 的类型,默认是 text/plain

请求 Demo:

POST /cgi-bin/qtest HTTP/1.1
Content-Type: multipart/form-data; boundary=2a8ae6ad-f4ad-4d9a-a92c-6d217011fe0f
Content-Length: 514

--2a8ae6ad-f4ad-4d9a-a92c-6d217011fe0f
Content-Disposition: form-data; name="datafile1"; filename="r.gif"
Content-Type: image/gif

GIF87a.............,...........D..;
--2a8ae6ad-f4ad-4d9a-a92c-6d217011fe0f
Content-Disposition: form-data; name="datafile2"; filename="g.gif"
Content-Type: image/gif

GIF87a.............,...........D..;
--2a8ae6ad-f4ad-4d9a-a92c-6d217011fe0f
Content-Disposition: form-data; name="datafile3"; filename="b.gif"
Content-Type: image/gif

GIF87a.............,...........D..;
--2a8ae6ad-f4ad-4d9a-a92c-6d217011fe0f--

压缩

multipart 可以使用 gzip 进行消息体的整体压缩。不能单独对各个 part 进行压缩。