HTTP Content-Disposition Explanation [ from MDN ]
在常规的HTTP应答中,Content-Disposition
消息头指示回复的内容该以何种形式展示,是以内联的形式(即网页或者页面的一部分),还是以附件的形式下载并保存到本地。
在multipart/form-data类型的应答消息体中, Content-Disposition
消息头可以被用在multipart消息体的子部分中,用来给出其对应字段的相关信息。各个子部分由在Content-Type
中定义的分隔符分隔。用在消息体自身则无实际意义。
Content-Disposition消息头最初是在MIME标准中定义的,HTTP表单及POST
请求只用到了其所有参数的一个子集。只有form-data
以及可选的name
和filename
三个参数可以应用在HTTP场景中。
Header type | Response header (for the main body) General header (for a subpart of a multipart body) |
---|---|
Forbidden header name | no |
链接到章节语法
链接到章节作为消息主体中的消息头
在HTTP场景中,第一个参数或者是inline
(默认值,表示回复中的消息体会以页面的一部分或者整个页面的形式展示),或者是attachment
(意味着消息体应该被下载到本地;大多数浏览器会呈现一个“保存为”的对话框,将filename
的值预填为下载后的文件名,假如它存在的话)。
Content-Disposition: inline
Content-Disposition: attachment
Content-Disposition: attachment; filename="filename.jpg"
链接到章节作为multipart body中的消息头
在HTTP场景中。第一个参数总是固定不变的form-data
;附加的参数不区分大小写,并且拥有参数值,参数名与参数值用等号(=)连接,参数值用双引号括起来。参数之间用分号(;)分隔。
Content-Disposition: form-data
Content-Disposition: form-data; name="fieldName"
Content-Disposition: form-data; name="fieldName"; filename="filename.jpg"
链接到章节指令
name
后面是一个表单字段名的字符串,每一个字段名会对应一个子部分。在同一个字段名对应多个文件的情况下(例如,带有multiple
属性的<input type=file>
元素),则多个子部分共用同一个字段名。如果name参数的值为 '_charset_'
,意味着这个子部分表示的不是一个HTML字段,而是在未明确指定字符集信息的情况下各部分使用的默认字符集。
filename
后面是要传送的文件的初始名称的字符串。这个参数总是可选的,而且不能盲目使用:路径信息必须舍掉,同时要进行一定的转换以符合服务器文件系统规则。这个参数主要用来提供展示性信息。当与 Content-Disposition: attachment
一同使用的时候,它被用作"保存为"对话框中呈现给用户的默认文件名。
filename*
"filename" 和 "filename*" 两个参数的唯一区别在于,"filename*"采用了 RFC 5987 中规定的编码方式。当"filename" 和 "filename*" 同时出现的时候,应该优先采用"filename*",假如二者都支持的话。
链接到章节示例
以下是一则可以触发"保存为"对话框的服务器应答:
200 OK
Content-Type: text/html; charset=utf-8
Content-Disposition: attachment; filename="cool.html"
Content-Length: 22
<HTML>Save me!</HTML>
这个简单的HTML文件会被下载到本地而不是在浏览器中展示。大多数浏览器默认会建议将cool.html
作为文件名。
以下是一个HTML表单的示例,展示了在 multipart/form-data
format 格式的报文中使用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--
链接到章节规范
Specification | Title |
---|---|
RFC 7578 | Returning Values from Forms: multipart/form-data |
RFC 6266 | Use of the Content-Disposition Header Field in the Hypertext Transfer Protocol (HTTP) |
RFC 2183 | Communicating Presentation Information in Internet Messages: The Content-Disposition Header Field |
链接到章节浏览器兼容性
Desktop | Mobile | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | Android webview | Chrome for Android | Edge Mobile | Firefox for Android | Opera for Android | iOS Safari | Samsung Internet | |
Basic support | Full supportYes | Full supportYes | Full supportYes | Full supportYes | Full supportYes | Full supportYes | Full supportYes | Full supportYes | Full supportYes | Full supportYes | Full supportYes | Full supportYes | Full supportYes |
Legend
Full support
Full support
链接到章节兼容性说明
- 在
filename
andfilename*
两个参数同时出现的情况下,Firefox 5 (比以前的版本)可以更好地处理Content-Disposition
应答消息头。它会遍历所有提供的名称,假如filename*
存在的话,就采用它的值,即使filename
更靠前。之前的版本会采用出现在前面的参数的值,导致有更合适的名称而不被使用。参见bug 588781.
链接到章节相关链接
- HTML Forms
Content-Type
中定义了 multipart body 的分隔符FormData
接口可以用来操作在XMLHttpRequest
API中使用的表单数据。
HTTP Content-Disposition Explanation [ from MDN ]的更多相关文章
- post multipart data boundary问题 使用curl 向jersey post文件
原以为curl 模拟post file跟post string类似,-d参数一加 ,header一加就完了,这次遇到个问题,却怎么都搞不定. curl模拟post提交 与客户端定的协议是: Heade ...
- [Mime] MimeEntity--MimeEntity Mime实体帮助类 (转载)
点击下载 MimeEntity.rar 这个类是关于Mime实体的类看下面代码吧 /// <summary> /// 类说明:Assistant /// 编 码 人:苏飞 /// 联系方式 ...
- mailsend - Send mail via SMTP protocol from command line
Introduction mailsend is a simple command line program to send mail via SMTP protocol. I used to sen ...
- RFC3261--sip
本文转载自 http://www.ietf.org/rfc/rfc3261.txt 中文翻译可参考 http://wenku.baidu.com/view/3e59517b1711cc7931b716 ...
- express传输buffer文件
最近要做一个功能,导出动态生成的excel文件,这个普普通通的功能却让我折腾了半天.大致流程是这样的,将数据结合excel模板通过ejsExcel库,动态生成excel文件,并发送到客户端. 在exp ...
- 使用phpExcel导出excel时,报500错
在自己本地导出excel没有问题,但是放到服务器出现500的错误! 解决方法:查看控制器引用的header文件,是否包含空格,如下: header('Pragma:public'); ...
- 笔记:Struts2 文件上传和下载
为了上传文件必须将表单的method设置为POST,将 enctype 设置为 muiltipart/form-data,只有设置为这种情况下,浏览器才会把用户选择文件的二进制数据发送给服务器. 上传 ...
- WiFi文件上传框架SGWiFiUpload
背景 在iOS端由于文件系统的封闭性,文件的上传变得十分麻烦,一个比较好的解决方案是通过局域网WiFi来传输文件并存储到沙盒中. 简介 SGWiFiUpload是一个基于CocoaHTTPServer ...
- SQL注入绕WAF总结
0x00 前言 在服务器客户端领域,曾经出现过一款360主机卫士,目前已停止更新和维护,官网都打不开了,但服务器中依然经常可以看到它的身影.从半年前的测试虚拟机里面,翻出了360主机卫士Apache版 ...
随机推荐
- 数据挖掘学习指引<一>
对于当前热门的大数据.云计算等技术,被百度.阿里等国内互联网巨头炒的非常火,数据挖掘作为一门非常有用的技术,在商业管理.市场分析.科学计算等大数据方面发挥着大作用. 数据挖掘技术也变得非常火,why? ...
- selenium webdriver 的三种等待方式
1.显式等待 一个显式等待是你定义的一段代码,用于等待某个条件发生然后再继续执行后续代码. from selenium import webdriver from selenium.webdriver ...
- element-ui table 前端渲染序号 index
1.前端渲染table 序号 2.使用element ui http://element-cn.eleme.io/#/zh-CN/component/table#zi-ding-yi-suo-yin ...
- Autofac3 在MVC4中的运用原理
这是一种新的开发模式,注入开发模式,或者叫它IOC模式,说起IOC你可以这样去理解它,它为你的某个实现流出一个注入点,你生产的对象,可以根据你之前的配置进行组合. IOC全称是Inversion o ...
- 〖Android〗/system/etc/recovery-resource.dat
源代码中的解释:[platform_build/tools/releasetools/ota_from_target_files] # Recovery is generated as a patch ...
- linux shell 总结
.#!指定执行脚本的shell 如果不写的话,用系统默认的shell s shell是所有linux ,unix都支持的 .#开始的行表示注释(不限于行首) 命令建议写绝对路径 执行: ./examp ...
- VC、OpenGL、ArcGIS Engine开发的二维三维结合的GIS系统
一.前言 众所周知,二维GIS技术发展了近四十年,伴随着计算机软硬件以及关系型数据库的飞速发展,二维GIS技术已日臻完善.在对地理信息的分析功能上有着无可比拟的优势.一些宏观的地理信息,一维的地理信息 ...
- 5分钟教你配置命令行界面的163邮箱client
网易163免费邮箱相关server信息: mutt 是命令行下的邮件client,它仅是管理邮件的组织编辑,邮件的发送和接收须要调用相应的程序. 这里用的各自是getmail 和 msmtp. 过程例 ...
- Ubuntu桌面操作快捷键
Ubuntu操作基本快捷键 * 打开主菜单 = Alt + F1 * 运行 = Alt + F2 * 打开终端 = Alt+F2 然后输入gnome-terminal回车 * 显示桌面 = Ctrl ...
- apache绑定多个域名
在httpd.conf里, 1.把#NameVirtualHost *:80前的注释去掉2.ServerName 127.0.0.1 修改成ServerName 72.167.11.303.#Name ...