我的公司运行网络邮件服务,我们试图诊断Word下载未自动打开的问题 - 从雅虎邮箱下载相同的*.doc文件将打开,但我们的文件不会。
在调查标题的过程中,我们看到这是来自雅虎的:
content-disposition attachment; filename*="utf-8''word document.doc";
而我们的标题是这样的:
content-disposition attachment; filename="word document.doc";
雅虎究竟在用额外的星号和utf-8''名称做什么?
我认为正确的答案是在 rfc 2231 中:
星号 ("*") 被重复使用以提供语言和 存在字符集信息,并且正在使用编码。一个 单引号 ("'") 用于分隔字符集和语言 参数值开头的信息。百分号 ("%") 用作编码标志,符合 RFC 2047。
具体而言,参数名称末尾的星号充当 指示字符集和语言信息可能出现在 参数值的开头。单引号用于 分隔字符集、语言和实际值信息 参数值字符串和百分号用于标记 以十六进制编码的八位字节。 例如:
Content-Type: application/x-stuff;
title*=us-ascii'en-us'This%20is%20%2A%2A%2Afun%2A%2A%2A
你用的是什么哑剧类型?
根据 RFC 2183 (http://www.ietf.org/rfc/rfc2183.txt),星号是必需的:
在 [RFC 822] 的扩展 BNF 表示法中,内容处置 标头字段定义如下:
disposition := "Content-Disposition" ":"
disposition-type
*(";" disposition-parm)
disposition-type := "inline"
/ "attachment"
/ extension-token
; values are not case-sensitive
disposition-parm := filename-parm
/ creation-date-parm
/ modification-date-parm
/ read-date-parm
/ size-parm
/ parameter
filename-parm := "filename" "=" value
creation-date-parm := "creation-date" "=" quoted-date-time
modification-date-parm := "modification-date" "=" quoted-date-time
read-date-parm := "read-date" "=" quoted-date-time
size-parm := "size" "=" 1*DIGIT
quoted-date-time := quoted-string
; contents MUST be an RFC 822 `date-time'
; numeric timezones (+HHMM or -HHMM) MUST be used