Content-Disposition

在常规HTTP响应中, Content-Disposition响应标头是一个标头,指示是否希望在浏览器中以内联方式显示内容,即作为网页或作为网页的一部分,还是作为附件显示 ,已下载并保存在本地.

multipart/form-data主体中,HTTP Content-Disposition常规标头是可以在multipart主体的子部分上使用的标头,以提供有关其适用字段的信息. 子部分由Content-Type标头中定义的边界 . 用于身体本身的Content-Disposition无效.

Content-Disposition标头是在电子邮件的MIME消息的较大上下文中定义的,但是仅一部分可能的参数适用于HTTP表单和POST请求. HTTP上下文中只能使用值form-data以及可选的伪指令namefilename .

标头类型 响应标头 (用于主体)
常规标头 (用于多部分实体的子部分)
Forbidden header name no

Syntax

As a response header for the main body

HTTP上下文中的第一个参数是inline (默认值,表明可以在网页内显示,也可以作为网页显示)或attachment (指示应下载;大多数浏览器会先显示"另存为"对话框)加上filename参数的值(如果存在).

Content-Disposition: inline
Content-Disposition: attachment
Content-Disposition: attachment; filename="filename.jpg"

As a header for a multipart body

HTTP上下文中的第一个参数始终是form-data . 其他参数不区分大小写,并且在'='符号后使用引号字符串语法的参数. 多个参数之间用分号( ';' )分隔.

Content-Disposition: form-data
Content-Disposition: form-data; name="fieldName"
Content-Disposition: form-data; name="fieldName"; filename="filename.jpg"

Directives

name
随后是一个字符串,其中包含此子部分的内容所引用的格式的HTML字段的名称. 当处理同一个字段中的多个文件时(例如, <input type="file">元素的multiple属性),可以有多个具有相同名称的子部分.
一个name与值'_charset_'表示该部分不是HTML场,但默认字符集,而无需显式的字符集信息使用的部分.
filename
后跟一个包含所传输文件的原始名称的字符串. 文件名始终是可选的,并且不能被应用程序盲目使用:路径信息应被删除,并且应完成向服务器文件系统规则的转换. 此参数主要提供指示性信息. 当与Content-Disposition: attachment结合使用时,它用作最终呈现给用户的"另存为"对话框的默认文件名.
filename*

参数" filename"和" filename *"的区别仅在于" filename *"使用RFC 5987中定义的编码. 如果在单个标头字段值中同时存在"文件名"和"文件名*",则当两者都理解时,"文件名*"比"文件名"更可取.

Examples

触发"另存为"对话框的响应:

200 OK
Content-Type: text/html; charset=utf-8
Content-Disposition: attachment; filename="cool.html"
Content-Length: 21

<HTML>Save me!</HTML>

这个简单的HTML文件将被保存为常规下载文件,而不是显示在浏览器中. 大多数浏览器建议将其保存在cool.html文件cool.html (默认情况下).

使用multipart/form-data格式发布的HTML表单示例,该格式利用了Content-Disposition标头:

POST /test.html HTTP/1.1
Host: example.org
Content-Type: multipart/form-data;boundary="boundary"

--boundary
Content-Disposition: form-data; name="field1"

value1
--boundary
Content-Disposition: form-data; name="field2"; filename="example.txt"

value2
--boundary--

Specifications

Specification Title
RFC 7578 从表单返回值:multipart / form-data
RFC 6266 超文本传输​​协议(HTTP)中Content-Disposition标头字段的使用
RFC 2183 在Internet消息中交流演示信息:内容处理标头字段

Browser compatibility

Update compatibility data on GitHub
DesktopMobile
ChromeEdgeFirefoxIE浏览器OperaSafariAndroid WebviewChrome for AndroidAndroid版Firefox适用于Android的OperaiOS上的Safari三星上网
Content-DispositionChrome 全力支持 YesEdge 全力支持 12Firefox 全力支持 YesIE 全力支持 YesOpera 全力支持 YesSafari 全力支持 YesWebView Android 全力支持 YesChrome Android 全力支持 YesFirefox Android 全力支持 YesOpera Android 全力支持 YesSafari iOS 全力支持 Yes三星互联网安卓 全力支持 Yes

Legend

Full support  
全力支持

Compatibility notes

  • 如果同时提供filenamefilename*参数,则Firefox 5可更有效地处理Content-Disposition HTTP响应标头. 它看起来通过所有提供的名称,使用filename*参数(如果可用),即使一个filename参数被首次列入. 以前,将使用第一个匹配参数,从而防止使用更合适的名称. 请参阅错误588781 .

See also