当前位置: 首页 > 后端技术 > Java

网络标准:MIME

时间:2023-04-01 14:19:33 Java

始终是1.0版介绍没有规则,没有规则,没有标准,没有网络通信。我们现在流行的互联网就是建立在各种网络协议和标准的基础上的。今天要给大家介绍的是一种网络标准格式,叫做MIME。它的全称是MultipurposeInternetMailExtensions,翻译过来就是MultipurposeInternetMailExtensions。那么有的朋友就开始疑惑了,原来是邮件的扩展协议,那跟我们使用的Internet网络有什么关系呢?别着急,让我们慢慢来。MIME详解很久以前,计算机的一个流行应用就是发送电子邮件。一开始,计算机世界的编码方式只有ASCII,但是随着时间的推移和各种应用需求的激增,ASCII格式已经不能满足我们的需求,而且格式的多类型也让我们很难相互通信,于是产生了一个统一的消息格式标准,这就是MIME。MIME让邮件不仅可以支持ASCII,还可以支持其他编码方式。同时支持图片、音频、视频、应用等多种附件。消息体也可以支持多个部分的集合。当此类消息电子邮件以MIME格式编码时,可以通过标准电子邮件协议(例如SMTP、POP和IMAP)发送。因为MIME是一个标准,只要邮件符合这个标准,就可以解析成功。很快,MIME在邮件世界得到了广泛的应用,但互联网已经发展到使用流行的HTTP协议来访问万维网,MIME中定义的各种内容类型自然而然地成为了其他协议中使用的内容标准。.此内容类型在MIME标头中定义。应用程序收到内容类型后,会根据type中指定的消息类型,使用相应的应用程序解析消息内容。MIMEheaderMIMEheader非常重要,它是应用程序判断邮件格式的首要依据。MIME标头可以包含以下字段。如果MIME-Version标头存在,则表示消息遵循MIME格式。它的值通常为1.0。MIME-Version:1.0细心的朋友可能要问了,既然有1.0,那到底是1.1还是2.0呢?抱歉,答案是否定的。因为根据MIME共同创建者NathanielBorenstein的说法,虽然引入MIME版本号是为了后续对MIME的修改和升级。但由于MIME规范并没有为未来的MIME版本升级设计好,不同的人可能会以不同的方式处理MIME版本升级。因此,在MIME广泛使用的今天,很难升级MIME规范。所以,只需使用1.0.Content-Type如果你是HTTP协议的学生,你应该对这个头很熟悉。这个header表示消息体的类型,包括type和subtype,例如:Content-Type:text/plainMIMEtype我们常说的就是这个标签。以下是常用的MIME类型:描述后缀类型超文本标记语言text.htmltext/htmlxmldocument.xmltext/xmlXHTMLdocument.xhtmlapplication/xhtml+xml普通text.txttext/plainRTFtext.rtfapplication/rtfPDFdocument.pdfapplication/pdfMicrosoftWord文档。wordapplication/mswordPNG图像.pngimage/pngGIF图形.gifimage/gifJPEG图形.jpeg,.jpgimage/jpegau声音文件.auaudio/basicMIDI音乐文件mid,.midiaaudio/midi,audio/x-midiRealAudio音乐文件.ra,.ramaudio/x-pn-realaudioMPEGfiles.mpg,.mpegvideo/mpegAVIfiles.avivideo/x-msvideoGZIPfiles.gzapplication/x-gzipTARfiles.tarapplication/x-tar任意二进制数据application/octet-streamContent-DispositionContent-Disposition在RFC2183A中添加字段以指示消息的显示样式。因为之前的消息只是定义了它的消息格式,并没有考虑消息的显示方式,尤其是邮件。例如,如果在电子邮件中插入一张图片,那么当我们阅读邮件时,图片是否应该内联显示?还是以附件的形式,需要用户下载后才能查看?在HTTP中,响应头字段Content-Disposition:attachment通常用于提示客户端将响应文本呈现为可下载的文件。通常,当收到这样的响应时,Web浏览器会提示用户将其内容保存为文件,而不是将其显示为浏览器窗口中的页面。content-transfer-encoding字段的用途是什么?我们知道,随着数据格式越来越多,传统的ASCII已经无法支持庞大的内容表示,于是出现了Unicode等超出ASCII范围的内容表示。但是对于SMTP服务器来说,能够传输或者识别的编码是有限的。如果要传输二进制内容,则需要使用一定的传输编码来转换二进制内容。这就是Content-Transfer-Encoding的意思。根据RFC和IANA的定义,传输编码方式有以下几种:对于我后续的文章,这里只是简单介绍一下。对于普通的SMTP服务器,它可以支持三种编码方式:7bit、quoted-printable和base64。对于8BITMIMESMTP扩展的SMTP服务器,也支持8bit编码。对于支持BINARYMIMESMTP扩展的SMTP服务器,也支持二进制的编码方式。Encoded-Word根据RFC2822,确认消息头中的字段名和值必须使用ASCII字符。如果消息包含非ASCII字符,则需要进行编码。这种编码是编码字。编码格式如下:"=?charset?encoding?encodedtext?=".charset表示原始消息的编码,encoding表示使用的编码方式,encodedtext为编码后的消息。Multipartmessages最后介绍一下Multipartmessages。我们知道一条消息有一个对应的消息类型:Content-Type。如果是复杂的消息,里面可能有不止一种消息类型。所以这时候就需要使用Multipartmessages,即将消息分成多个部分,每个部分都有一个Content-Type。这种类型在电子邮件中更常见。以下是Multipart消息的示例,在Content-Type中指定消息边界。MIME版本:1.0内容类型:多部分/混合;boundary=frontierThisisamessagewithmultiplepartsinMIMEformat.--frontierContent-Type:text/plainThisisthebodyofthemessage.--frontierContent-Type:application/octet-streamContent-Transfer-Encoding:base64PGh0bWw+CiAgPGhlYWQ+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPHA消息体+VGhpcyBpcyB0aGUgYm9keSBvZiB0aGUgbWVziB0aGUgbWVzc2FnZS48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==--frontier--总结以上就是MIME的基础介绍,在其中,我们提到了几种燕式转运的文章。本文已收录于http://www.flydean.com/12-mime/最流行的解读,最深刻的干货,最简洁的教程,很多你不知道的小技巧等你来发现!欢迎关注我的公众号:《程序那些事儿》,懂技术,更懂你!