Content-Disposition

优质
小牛编辑
111浏览
2023-12-01

在常规 HTTP 响应中,Content-Disposition响应标头是指示内容是否预期在浏览器中内联显示的标题,即,作为网页或作为网页的一部分或作为附件下载并且本地保存。

在一个multipart/form-data正文中,HTTP Content-Disposition通用标题是一个标题,可以在多部分主体的子部分中使用,以提供有关它适用的字段的信息。子部分由标题中定义的边界分隔Content-Type。用于身体本身,Content-Disposition没有任何作用。

所述Content-Disposition的 header 在 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"

作为多部分主体的 header

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

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

指令

name后面跟着一个字符串,其中包含该字段的内容引用的 HTML 字段的名称。在同一字段中处理多个文件(例如元素的multiple属性<input type=file>)时,可能会有几个具有相同名称的子部分。

一个name有值'_charset_'表明该部分不是 HTML 区域,但默认字符集,而无需显式的字符集信息使用的部分。

filename后面是一个包含传输文件的原始名称的字符串。文件名始终是可选的,不能被应用程序盲目使用:路径信息应该被删除,并且应该转换为服务器文件系统规则。该参数提供大部分指示性信息。当与其结合使用时Content-Disposition: attachment,它被用作提供给 user.filename 的最终“另存为”对话框的默认文件名*

参数“filename”和“filename *”的区别仅在于“filename *”使用RFC 5987中定义的编码。当“文件名”和“文件名*”都出现在单个标题字段值中时,“文件名*”优于“文件名”,当两者都存在并被理解时。

例子

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

200 OK
Content-Type: text/html; charset=utf-8Content-Disposition: attachment; filename="cool.html"Content-Length: 22<HTML>Save me!</HTML>

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

HTML 表单的一个示例,使用multipart/form-data使用Content-Disposition标题的格式发布:

POST /test.html HTTP/1.1Host: 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

浏览器兼容性

Feature

Chrome

Firefox

Edge

Internet Explorer

Opera

Safari

Basic Support

(Yes)

(Yes)

(Yes)

(Yes)

(Yes)

(Yes)

Feature

Android

Chrome for Android

Edge mobile

Firefox for Android

IE mobile

Opera Android

iOS Safari

Basic Support

(Yes)

(Yes)

(Yes)

(Yes)

(Yes)

(Yes)

(Yes)

兼容性说明

  • Content-Disposition如果提供了参数filenamefilename*参数,Firefox 5 将更有效地处理 HTTP 响应头; 它会查看所有提供的名称,filename*如果有可用的名称,则使用参数,即使filename首先包含参数。以前,将使用第一个匹配参数,从而阻止使用更合适的名称。见错误588781。见还
  • HTML Forms
  • The Content-Type defining the boundary of the multipart body.
  • The FormData interface used to manipulate form data for use in the XMLHttpRequest API.

最后更新:

类似资料

  • 我目前正在开发一个C#web API。对于特定的调用,我需要使用对API的ajax调用发送2个图像,以便API可以将它们保存为数据库中的varbinary(max)。 null

  • 我正在尝试使用: ...但我没有任何运气找到定义它的DLL。 首先,我尝试添加对微软的引用。Http以及类不可用。 那么,谁能告诉我在哪里可以找到类?

  • 接受另一个需要是的参数。 如何设置一个?有没有留档的任何地方适用于Windows Phone 8. 如果我做,它的工作原理很棒!但它需要是POST与key="bla"的内容,某事="yay" //编辑 非常感谢你的回答...这工作得很好,但这里仍然有一些不确定性: 我假设数据“测试=某物”会在api方面作为发布数据“测试”,显然不会。另一方面,我可能需要通过发布数据发布整个对象/数组,所以我假设j

  • 我正在编写一个web api,它有一个post方法来接受从UI上传的文件。 然后我通过邮递员向上面的行动发出请求。我将content-type头设置为multipart/form-data,但在操作执行期间发生错误。以下是错误消息正文: “提供的'HttpContent'实例无效。它没有带有'boundary'参数的'multipart'内容类型标头。\r\n参数名称:Content” 有人能帮我

  • 问题内容: 我在这里使用答案来尝试通过数据上传进行请求,但是服务器端有不同寻常的要求。该服务器是一个PHP脚本,需要对行,因为它是期待一个文件上传。 但是,在客户端,我想发布一个内存中的缓冲区(在这种情况下为String)而不是文件,但是让服务器像对待文件上传一样处理它。 但是,使用I无法在行上添加必填字段。因此,我尝试使用,但这只是将其放在单独的行上。 我如何才能进入一行,而无需先将其写入文件然

  • 问题内容: 设置和使用Spring 3 的最合适,最标准的方法是什么? 动作看起来像: 尽管该文件是zip文件,所以浏览器始终会下载该文件,但是我想明确提及该文件作为附件,并且还提供与该文件的实际名称无关的文件名。 可能有解决此问题的方法,但是我想知道适当的Spring和实现此目标的方法。 PS这里使用的文件是一个临时文件,当JVM存在时,标记为删除。 问题答案:

相关阅读