Content-Disposition字段为什么不支持对filename的百分号编码?

Safari浏览器下载文件的请求头中Content-Disposition字段为什么不支持对filename的百分号编码?,这会导致下载的文件名出现错误,按照HTTP标准,浏览器需要支持该编码方式。


[经过版主编辑]

发布日期 2021年1月26日 下午7:54

回复
回复量: 4
排序方式: 

2021年1月27日 上午10:37 回应 Sariel

您好,2010年发布的 RFC 5987 中正式规定了 HTTP Header 中多语言编码的处理方式采用 parameter*=charset'lang'value 的格式,其中:

  • charset 和 lang 不区分大小写。
  • lang 是用来标注字段的语言,以供读屏软件朗诵或根据语言特性进行特殊渲染,可以留空。
  • value 根据 RFC 3986 Section 2.1 使用百分号编码,并且规定浏览器至少应该支持 ASCII 和 UTF-8 。
  • 当 parameter 和 parameter* 同时出现在 HTTP 头中时,浏览器应当使用后者。

filename作为Content-Disposition的内容(即value),应当采用百分号编码,现在的情况是对于百分号编码的文件名,其他浏览器下载后可以正常解码为中文:

而Safari浏览器则仍然为一串百分号编码的文本:

希望可以得到一个解决方案,以助于我们对response header 做相应的处理,感谢🙏

回复

2021年1月27日 上午11:06 回应 只有我最可爱

依据rfc6266 appendix-C.1

编码字符不应(MUST NOT)用于Content-Type 及Content-Disposition,

 An 'encoded-word' MUST NOT be used in parameter of a MIME Content-
      Type or Content-Disposition field, or in any structured field body
      except within a 'comment' or 'phrase'.

另外, 根据rfc6266 appendix-C.2, 可以推论出协议并未明确要求 UA(浏览器)对Percent Encoding进行解析.


目前来看, Safari 选择了不对编码字符进行解析, 所以这个你只能去反馈相应要求, 但是不进行解析也并没有违反标准.

如果是进行开发的话, 建议在服务端根据 UA 创建不同的 response header, 浏览器为 Safari 的情况下将文件名设置为英文.


回复

这个主题已被系统或社区团队关闭。 你可以为你认为有帮助的任何帖子投票,也可以在社区中搜索其他答案。

Content-Disposition字段为什么不支持对filename的百分号编码?

欢迎来到 Apple 支持社区
Apple 客户在其产品方面互相帮助的论坛。使用您的 Apple 帐户开始畅游其中吧!!