我们是怎么让邮件里又有图片又有文字的?
文字和图片是两个不同的类型,而邮件又是一个类型。
C语言的结构体允许用户定义一个含有多类型的自定义类型
像这样,看不懂没关系,你只要知道邮件里有多个类型就可以了
typedef struct myType = {
int num;
char words[20];
};
那么在HTTP传输里有什么机制支持邮件可以使用多种类型呢?
猜对了,就是MIME(多用途邮件扩展)
在MIME中会使用多部分对象集合的方法来容纳不同的数据
相应地,HTTP协议也采用了多部分对象集合,发送的一份报文主体内可以含有多种类型实体。通常是在图片和文本等上传时使用
多部分对象集合包含的对象如下
multipart/form-data //在web表单文件上传时使用
例:
mutipart/form-data
Content-Type : mutipart/form-data;boundary = AaB03x
CR+LF
-- Aab03x
Content-Disposition : form-data;name = "fieldl" Joe Blow
CR+LF
--Aab03x
Content-Disposition : form-data; name = "pics"; filename = "file1.txt"
Content-Type : text/plain
//(file1.txt的数据) CR+LF
--AaB03
multipart/byteranges //状态码206(部分内容)响应报文包含了多个范围的内容时使用
例
multipart/byteranges
HTTP/1.1 206 Paitial Content
Date ; Fri,13 Jul 2012 02:45:26 GMT
Last-Modified:Fri 31 Aug 2007 02:03:20 GMT
Content-Tupe : multipart/byteranges; boundary = THIS_STRIMG_SEPARATES
CR+LF
--THIS_STRING_SEPARATES
Content-Type : application/pdf
Content-Range:bytes 500-999/8000
//范围指定的数据 CR+LF
--THIS_STRING_SEPARATES
Content-Type : application/pdf
Content-Ranges : bytes 7000-7999/8000
//范围指定的数据 CR+LF
--THIS_STRING_SEPARATES
在HTTP上使用多部分对象集合时,需要在首部字段里加上 Content-Type
使用boundary字符串来划分多部分对象集合指明的各类实体。在boundary字符串指定的各个实体的初始行之前插入--标记,而在多部分对象集合对应的字符串的最后插入--标记作为结束
多部分对象集合的每个部分类型中,都可以含有首部字段
另外,可以在某个部分中嵌套使用部分对象集合
有关MIME更多详细,请参考RFC2046
//本系列教程基于《图解HTTP》,此书国内各大购物网站皆可购买
转载请注明出处 by:M_ZPHr
最后修改日期:2019-02-04