【实习篇】之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源码的解决办法,它是严格按照协议上的规范来处理的。

相关推荐
zhang133830890758 分钟前
CG-09H 超声波风速风向传感器 加热型 ABS材质 重量轻 没有机械部件
大数据·运维·网络·人工智能·自动化
津津有味道35 分钟前
易语言TCP服务端接收刷卡数据并向客户端读卡器发送指令
服务器·网络协议·tcp·易语言
酣大智2 小时前
接口模式参数
运维·网络·网络协议·tcp/ip
Genie cloud2 小时前
1Panel SSL证书申请完整教程
服务器·网络协议·云计算·ssl
24zhgjx-lxq2 小时前
华为ensp:MSTP
网络·安全·华为·hcip·ensp
ling___xi2 小时前
《计算机网络》计网3小时期末速成课各版本教程都可用谢稀仁湖科大版都可用_哔哩哔哩_bilibili(笔记)
网络·笔记·计算机网络
REDcker2 小时前
Linux 文件描述符与 Socket 选项操作详解
linux·运维·网络
Up九五小庞3 小时前
用arpspoof实现100%批量切断192.168.110.10 - 192.168.110.100 断网(双向欺骗)--九五小庞
网络·开源
躺柒3 小时前
读数字时代的网络风险管理:策略、计划与执行04风险指引体系
大数据·网络·信息安全·数字化·网络管理·网络风险管理
独角鲸网络安全实验室3 小时前
本地信任成“致命漏洞”:数千Clawdbot Agent公网裸奔,供应链与内网安全告急
网络·网关·安全·php·漏洞·clawdbot·信任机制漏洞