Content-Disposition字段为什么不支持对filename的百分号编码?
Safari浏览器下载文件的请求头中Content-Disposition字段为什么不支持对filename的百分号编码?,这会导致下载的文件名出现错误,按照HTTP标准,浏览器需要支持该编码方式。
[经过版主编辑]
Safari浏览器下载文件的请求头中Content-Disposition字段为什么不支持对filename的百分号编码?,这会导致下载的文件名出现错误,按照HTTP标准,浏览器需要支持该编码方式。
[经过版主编辑]
您好,2010年发布的 RFC 5987 中正式规定了 HTTP Header 中多语言编码的处理方式采用 parameter*=charset'lang'value 的格式,其中:
filename作为Content-Disposition的内容(即value),应当采用百分号编码,现在的情况是对于百分号编码的文件名,其他浏览器下载后可以正常解码为中文:
而Safari浏览器则仍然为一串百分号编码的文本:
希望可以得到一个解决方案,以助于我们对response header 做相应的处理,感谢🙏
编码字符不应(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是在 response header 中,
其次, Safari 支持 Content-Disposition,
最后, 根据 RFC 6266, 其中并未对 filename 的编码方式做任何规定.
感谢解答
Content-Disposition字段为什么不支持对filename的百分号编码?