【实习篇】之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 小时前
车间实测记录:三菱电机MR-J5伺服与压力控制方案的场景适配
网络·物联网·业界资讯
门思科技1 小时前
开源网关有哪些:主流类型梳理
网络·python·物联网
llilian_163 小时前
北斗授时卡同步解决方案 gnss授时卡 计算机时间同步板卡
大数据·网络·人工智能·功能测试·51单片机
Vicky_time3 小时前
跨境物流系统架构:美国海外仓与FBA中转海外仓选型技术方案评测
网络·人工智能
玄芯散人3 小时前
【筑基·055】TCP vs UDP:可靠和快速的取舍
网络协议·tcpdump
多多鼠4 小时前
System Prompt 的“版本漂移”问题:从变更管理到 A/B 测试体系
开发语言·网络·人工智能·python·langchain
Allen_LVyingbo6 小时前
三甲医院医疗AI代码库管理系统研究(上)
网络·transformer·知识图谱·健康医疗
迪康coolmu6 小时前
企业文件外发管控落地实践 —— 基于迪康端点安全一体化管理系统
运维·网络·经验分享·安全
小此方6 小时前
Linux网络(十二):HTTP短连接与长连接:从Connection机制到Cookie、Session,彻底理解HTTP的无状态
服务器·网络·http
永远不会出bug7 小时前
什么是内网穿透?
网络