在常规的HTTP应答中,Content-Disposition 消息头指示回复的内容该以何种形式展示,是以内联的形式(即网页或者页面的一部分),还是以附件的形式下载并保存到本地。

在multipart/form-data类型的应答消息体中, Content-Disposition 消息头可以被用在multipart消息体的子部分中,用来给出其对应字段的相关信息。各个子部分由在Content-Type 中定义的分隔符分隔。用在消息体自身则无实际意义。

Content-Disposition消息头最初是在MIME标准中定义的,HTTP表单及POST 请求只用到了其所有参数的一个子集。只有form-data以及可选的namefilename三个参数可以应用在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 and filename* 两个参数同时出现的情况下,Firefox 5 (比以前的版本)可以更好地处理 Content-Disposition 应答消息头。它会遍历所有提供的名称,假如 filename* 存在的话,就采用它的值,即使 filename 更靠前。之前的版本会采用出现在前面的参数的值,导致有更合适的名称而不被使用。参见bug 588781.

链接到章节相关链接

  • HTML Forms
  • Content-Type  中定义了 multipart body 的分隔符
  • FormData 接口可以用来操作在 XMLHttpRequest API中使用的表单数据。

转载于:https://www.cnblogs.com/jinhengyu/p/10257791.html

HTTP Content-Disposition Explanation [ from MDN ]相关推荐

  1. 洛阳郊区1980年地图_在无聊的郊区居住中解释CSS Box模型

    洛阳郊区1980年地图 by Kevin Kononenko 凯文·科诺年科(Kevin Kononenko) 如果您去过一个普通的郊区社区,那么您可以了解CSS Box Model. (If you ...

  2. Content-Type: application/vnd.ms-excel

    Content-Disposition参数: attachment --- 作为附件下载 inline --- 在线打开 具体使用如:header("Content-Disposition: ...

  3. 命令测试post_性能测试脚本编写之三

    >>>推荐阅读<<< 1.性能测试学习笔记-场景设计 2.性能测试的重要意义 3.性能分析流程及方法 4.应用系统性能调优之性能分析 ### web_url ### ...

  4. nginx lua调用redis和mongo

    参考 http://blog.csdn.net/vboy1010/article/details/7892120 http://www.zhangjixuem.com.cn/2014/4/1/0103 ...

  5. 给 OpenPOP.Net 加一个小功能,可用于收取邮件时监测数据流量!

    /* 最近写了一个自动收邮件的机器人,原来一开始偷懒"娶"了 COM 组件 JMail: <封装 JMail 4.4 的 POP3 为 .Net 组件 (.dll 程序集), ...

  6. C#控制台程序,发送邮件,可带附件

    最近几天由于公司发送了大量内容相同的邮件,而被国外的反垃圾邮件组织列入了黑名单,致使很多客户收不到我们的邮件,客服接到投诉,而之前做的一个查询日志的小页面,因为某种原因,访问速度很慢,甚至这几天人一多 ...

  7. nodemailer的使用

    前段时间有个很普通的项目需要发邮件的功能,而且是刚开始学nodejs,所以只是搜索了下用什么好的库能实现,就找到了nodemailer了.这篇文章主要是记录一下使用的过程和经验. 如何使用 这里就先上 ...

  8. Java Excel文件下载

    使用servlet来下载文件,其原理非常简单,只要得到文件的输入流(或相应字节),然后写输出流即可.现就其中的几个细节问题展开: 1. MIME类型的设置: Web 浏览器使用 MIME 类型来识别非 ...

  9. 杂记-----------

    1: excel导出时中文名乱码 (String. (.getBytes "文件名" "GBK") "iso8859-1"),需要把中文名编 ...

最新文章

  1. Mysql 5.5 源码安装
  2. php输出查询mysql中文乱码_解决php mysql查询插入中文乱码问题
  3. Java8中使用以下类计算日期时间差:Period、Duration、ChronoUnit
  4. 字符串经典题目(Leetcode题解-Python语言)
  5. 基于Fragment的百度地图框架的使用
  6. 【英语学习】【Daily English】U11 Work L01 Would you like a tour of the office?
  7. 用Aspose.Words 从Word文档中提取表格数据
  8. latex 目录层次设置
  9. 9年经验,总结SEO职业瓶颈
  10. c#使用office的墨迹书写工具
  11. VUE3+TS脚手架安装+目录文件规范
  12. 中文谚语 enlish version
  13. 电脑键盘上各个按键功能详解
  14. 设计模式:可复用面向对象软件的基础
  15. CSS公鸡走路动画js特效
  16. 键盘计算机论文,计算机论文
  17. 在计算机中文字的表示
  18. Hi-End音箱真伪(3)-巴汉著文
  19. PLC实现入栈出栈功能
  20. PPT结尾页,除了「谢谢」你还能写点啥?

热门文章

  1. 机器学习里的kernel是指什么?
  2. WEB2.0开发平台
  3. ReportViewer教程(1)-新建工程,添加Form和报表浏览器
  4. 神经网络-损失函数-等高线理解
  5. 深度学习-Tensorflow1.x之Softmax函数代码实现对比在Tensorflow1.x与 Numpy
  6. 560. 和为K的子数组
  7. matlab小波分析常用函数
  8. Ubuntu下ffmpeg 捕获屏幕和采集声卡、摄像头、麦克风声音
  9. 计算机暑期实践相关内容,计算机暑假社会实践报告5000范文
  10. 统计学习方法笔记(李航)———第五章(决策树)