旧项目之殇-2

旧项目之殇-2

事件背景

周五研发同学反馈升级程序中下载apk包的请求响应头中content-type是application/octet-stream导致无法安装,具体如下图:

主要是我们的升级程序用了Google的一个官方库,库里面下载默认会对header进行处理,如果不是安装包的,就安装不了,需要把响应头中的content-type修改为application/vnd.android.package-archive就可以了。

解决方法

这块在去年9月的时候发生过,当时解决了,年底迁移机房这块就遗忘了,记录一下解决办法,持久化到配置中防止后面再遗忘。apk的包都在CDN,CDN默认请求响应中content-type是application/octet-stream,最方便的添加就是在源站添加。

在源站的Nginx配置中,mime.types 中指定了项目中已知的文件类型,如果没有在 mime.types 中出现,则默认为 default_type,而默认default_type 是application/octet-stream

mime.types中添加application/vnd.android.package-archive apk; 就可以了,如下图:

再次下载apk包,响应的请求content-type就对了。

知识扩展

参考:设置正确的mime类型的重要性

MIME 类型(IANA 媒体类型)媒体类型(也通常称为多用途互联网邮件扩展或 MIME 类型)是一种标准,用来表示文档、文件或一组数据的性质和格式。它在 IETF 的 RFC 6838 中进行了定义和标准化。

application/octet-stream 这是二进制文件的默认值。由于这意味着未知的二进制文件,浏览器一般不会自动执行或询问执行。浏览器将这些文件视为 Content-Disposition 标头被设置为 attachment 一样,并弹出“另存为”对话框。

application/octet-stream 是一种通用的二进制数据类型的 MIME type 。在 MIME type 中,application 表示一种应用程序或二进制数据类型,而 octet-stream 表示二进制数据流,即未知的二进制数据。(摘自:https://juejin.cn/post/7259582611181240377

常用的MIME类型如下,方便查找

写在最后

查看B站的安卓和mac安装包,响应的content-type做了明确的分类,这些细节需要多像大厂学习~!

留下回复

error: Content is protected !!