RFC2231翻译:MIME参数值和编码字的扩展

本文定义了MIME协议的扩展机制,解决了长参数值、非US-ASCII字符集及语言信息缺失等问题,确保了电子邮件头部信息的完整性和正确显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 摘要

本文档定义了对RFC2045媒体类型和RFC2183的disposition参数值机制的扩展,以提供:

  1. 在US-ASCII以外的字符集中指定参数值的方法。
  2. 在显示值时指定要使用的语言。
  3. 用于长参数值的机制,以避免header行换行的问题。

此文档还定义了RFC2047中定义的encoded word的扩展。

  • 介绍

MIME定义了一种消息格式,可以用于发送非US-ASCII字符集的文本消息主体,非文本的消息主体,多部分的消息主体,以及非US-ASCII字符集的文本头信息。

MIME现在被广泛部署,并被各种互联网协议使用,当然包括互联网邮件。然而,MIME的成功导致了对原始协议规范中未提供的其他机制的需求。

在content-type和content-disposition后面跟着许多参数,这固有地施加了三个关键的限制:在电子邮件头域中的行被依照RFC822的规则折叠了,这使得长参数值出现了问题;MIME头被限制在7bit US-ASCII的形式,而RFC2047中的encoded-word机制不可用于参数值,这使得在不指定某种私有编码的情况下不可能在US-ASCII以外的字符集中写参数值;字符集信息不足以正确显示某种类型的信息,还需要语言信息。

本文档定义了解决这些限制的扩展,所有这些扩展都是以一种与现有的MIME实现在语法方面完全兼容的方式实现的。此外,这些扩展被设计为对MIME的现有使用产生尽可能小的影响。

重要提示,这些机制最终在实际使用时显得有些冗长。因此,这些机制不应轻而易举地使用,它们应该保留在真正需要它们的情况下。

  • 参数值延续

长参数值与header行包装约定的相合性不好,特别是标准的header行换行取决于LWSP的位置,LWSP可能存在于参数值中,也可能不存在于参数值中,即使存在也可能无法识别,因为执行行包装的代理可能没有参数值格式的特定知识。结果是,长参数行可能会因为错误的换行实现而被截断或损坏。

因此,需要一种机制将参数值分解成更小的单元,这些单元可以进行换行。任何此类机制都必须与现有的mime处理器兼容,这意味着:

  1. 这种机制绝不能改变MIME的type行与disposition行的格式。
  2. 这种机制不能依赖于参数顺序,因为MIME声明参数不区分顺序。注意,虽然MIME确实禁止在传输过程中修改MIME头,但仍然有可能在用户代理级别处理时把参数重排序。

那么,显而易见的解决方案是使用多个参数来包含单个参数值,并使用某种可分辨的名称来指明这里执行了这样的操作。这个解决方案正是这里指定的:后跟十进制数字的星号(*)被用来指示正在使用多个参数来封装单个参数值,数字从0开始每个参数部分加1,数字不允许有前导的0,也不允许有数字被跳过。通过按顺序连接参数的各个部分,可以恢复原始参数值。

For example, the content-type field

 

        Content-Type: message/external-body; access-type=URL;

         URL*0="ftp://";

         URL*1="cs.utk.edu/pub/moore/bulk-mailer/bulk-mailer.tar"

 

is semantically identical to

 

        Content-Type: message/external-body; access-type=URL;

          URL=ftp://cs.utk.edu/pub/moore/bulk-mailer/bulk-mailer.tar

注意,参数值的引号是参数值语法的一部分,它们不是参数值本身的一部分,此外,还明确允许混合使用带引号和不带引号的延续字段。

  • 参数值的字符集与语言信息

某些参数值可能需要使用字符集或语言信息来进行限定,很明显需要一个可分辨的参数名来标识此信息何时出现,以及参数值本身中信息的特定语法。此外,还需要一种轻量级的编码机制来在参数值中容纳8位信息。

星号(*)被用来在参数名中指示语言和字符集信息存在且编码被使用,单引号(‘)用于在参数值开头分割字符集和语言信息,百分号(%)用于编码标志。具体来说,在参数名末尾的星号用于表明字符集和语言信息可能出现在参数值的开头;单引号用于分割参数集字符串中的字符集、语言信息、实际参数值;百分号用于标记十六进制编码的八位字节。

For example:

        Content-Type: application/x-stuff;

         title*=us-ascii'en-us'This%20is%20%2A%2A%2Afun%2A%2A%2A

请注意,完全允许将字符集或语言信息字段留空,还要注意,即使省略了其中一个字段值,单引号分隔符也必须存在。不能通过省略字符集或语言信息来指示默认字符集或语言——参数字段不能指定默认字符集或语言。

       4.1 字符集、语言信息与参数延续一起使用

字符集、语言信息与参数延续可以一起使用,举个例子:

   Content-Type: application/x-stuff

    title*0*=us-ascii'en'This%20is%20even%20more%20

    title*1*=%2A%2A%2Afun%2A%2A%2A%20

    title*2="isn't it!"

注意:

  1. 语言和字符集信息只出现在参数值的开头。
  2. 参数延续不提供在同一参数值中使用多个字符集或语言的功能。
  • Encoded Words中的语言信息

       鉴于使用encoded words的字段是用于显示的,有时需要将语言信息与编码的单词以及字符集关联起来。本规范扩展了encoded words的定义,以允许包含此类信息,这只需在字符集规范后加上星号和语言标记即可完成。例如:

From: =?US-ASCII*EN?Q?Keith_Moore?= moore@cs.utk.edu

  • IMAP4处理参数值

IMAP4服务器生成BODY与BODYSTRUCTURE的fetch响应时应该对参数值延续解码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值