【实习篇】之Http头部字段之Disposition介绍

Http头部字段之Disposition

实习的时候公司将一个某个关于下载的Bug交给了我来修,看了代码和日志后发现是Disposition字段的规范兼容性惹的锅,因为有些协议使用的是老协议,我们的项目没有对其进行兼容,最终我阅读RFC的规范参考Goole浏览器的源码将其解决。

Disposition头部字段介绍

Content-Disposition 是 HTTP 响应头(或请求头)中的一个字段,主要用于 控制客户端如何处理服务器返回的内容,例如:

  • 是否直接显示内容(如浏览器内嵌显示 PDF)。
  • 是否强制下载文件(弹出下载对话框)。
  • 指定下载时的默认文件名
  • 语法格式

    复制代码
    Content-Disposition: inline | attachment; filename="filename.ext"
    • inline:直接显示。
    • attachment:强制下载。
    • filename:关键参数,文件名。

RFC规范介绍

  1. RFC是什么

    RFC(Request for Comments,征求意见稿) 是一系列由 互联网工程任务组(IETF, Internet Engineering Task Force) 发布的技术标准文档,用于定义互联网协议(如 TCP/IP、HTTP、DNS)、通信规范、API 设计等。RFC 文档是互联网基础设施的核心参考,许多网络协议和技术的实现都基于它们。

  2. RFC的分类

    类型 说明 示例
    标准(Standards Track) 正式成为互联网标准,如 TCP/IP、HTTP、SMTP。 RFC 793 (TCP)、RFC 9110 (HTTP/1.1)
    实验性(Experimental) 尚未成熟的技术,可能被采纳或废弃。 RFC 2324 (HTCPCP,恶搞的"咖啡壶协议")
    信息性(Informational) 提供背景知识,非正式标准。 RFC 1855 (网络礼仪指南)
    历史性(Historic) 已过时的协议或技术。 RFC 1149 (IP over Carrier Pigeon)
    最佳实践(BCP, Best Current Practice) 推荐的操作方法,如安全实践。 RFC 6919 (DNSSEC 部署指南)

RFC 6266与RFC 2047

  1. RFC6266: Content-Disposition in HTTP
  • 标题 : "Use of the Content-Disposition Header Field in the Hypertext Transfer Protocol (HTTP)"
  • 发布: 2011年6月
  • 状态: 现行标准(Proposed Standard)
  • 核心作用 :标准化HTTP响应头 Content-Disposition 的用法,用于指示浏览器如何处理服务器返回的内容(如直接显示或下载文件)。

当传输的filename是全英文时,使用filename参数直接用ASCII就能表示。

  • 但是如果出现中英文混合,此时就无法表示了,所以它依赖RFC 5987
  1. RFC5987 (Character Set and Language Encoding for HTTP Headers)
  • 作用 :RFC6266 使用 RFC5987 定义的 filename* 参数格式来解决非ASCII文件名编码问题(如中文文件名)。其对非中文使用url encode+utf8转码的形式:

    c++ 复制代码
    Content-Disposition: attachment; filename*=UTF-8''%E4%B8%AD%E6%96%87.txt
  1. RFC2047: MIME Message Header Extensions
  • 标题 : "MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text"
  • 发布: 1996年11月
  • 状态: 现行标准(Proposed Standard)
  • 核心作用 :
    扩展电子邮件(MIME)头部字段,支持非ASCII字符(如中文、日文)的编码传输。

它处理中文的方式是将所有中文字符先转为Base64,然后加上特定的格式进行分段(如果太长)。

  • 所以我们根据 RFC 2047 规范 ,对于被分割成多个编码段的连续文本,必须先合并所有分段内容,再进行整体解码,这是协议明确规定的强制性要求。
复制代码
=?UTF-8?B?YW55?= =?UTF-8?B?IGNh?= =?UTF-8?B?cmU=?=

网易邮箱就是使用的RFC2027标准来传输下载附件时的filename

Goole源码参考:如果你想要对上述协议的disposition标准都进行兼容,去模拟浏览器作为不同服务器的客户端,可以参考Goole源码的解决办法,它是严格按照协议上的规范来处理的。

相关推荐
随身数智备忘录1 小时前
什么是设备管理体系?设备管理体系包含哪些核心模块?
网络·数据库·人工智能
第五文修2 小时前
手机OTG转TTL网口实现ping功能
网络·智能手机
德思特2 小时前
通过 Wireshark 抓取串口命令
网络协议·测试工具·wireshark
云边云科技_云网融合2 小时前
企业大模型时代的网络架构五层演进:从连接到智能的范式重构
网络·重构·架构
KnowSafe4 小时前
2026年SSL证书市场便宜且安全的SSL证书调研
网络协议·安全·ssl
xhbh6664 小时前
代理ARP (Proxy ARP) 是如何实现跨网段通信的?在Linux下如何配置?
服务器·网络·智能路由器·端口映射·映射
数智化管理手记5 小时前
精益生产3步实操,让现场从混乱变标杆
大数据·运维·网络·人工智能·精益工程
XiYang-DING6 小时前
【Java EE】TCP—可靠传输
网络·tcp/ip·java-ee
沃虎电子6 小时前
片式网络变压器:从“手工品”到“SMD元件”的产业跨越
网络·片式网络变压器
神奇小梵6 小时前
关于finalshell的使用
linux·服务器·网络