如果上传的文件没有扩展名,我是否必须指定MIME类型?换句话说,是否有默认的通用MIME类型?
如果上传的文件没有扩展名,我是否必须指定MIME类型?换句话说,是否有默认的通用MIME类型?
我们应该使用RFC-7231(HTTP/1.1语义和内容)作为参考,而不是RFC-2046(媒体类型),因为问题明确涉及到HTTP内容类型。
RFC-2046也没有清楚地定义未知类型,但RFC-7231有。
不要为未知数据发送MIME类型。
更明确地说:根本不要使用Content-Type头。
RFC-7231
超文本传输协议(HTTP/1.1):语义和内容
3.1.1.5。 内容类型生成包含有效负载正文的消息的发送方应在该消息中生成Content-Type标头字段,除非封闭表示的预期媒体类型对发送方未知。
该部分明确告诉您如果您不确定,可以省略它。 它还指出接收者可以假设类型为application/octet-stream,但实际情况可能是其他东西。
RFC-2046
4.5.1。 二进制流子类型对于接收“application/octet-stream”实体的实现,推荐的操作是仅向用户提供将数据放入文件中的选项,取消任何Content-Transfer-Encoding,或者可能将其用作用户指定的处理过程的输入。
正如上面已经声明的那样:
可以假设媒体类型为"application/octet-stream"([RFC2046], Section 4.5.1),或者检查数据以确定其类型。 如果将其定义为"application/octet-stream",则表明您知道它是"application/octet-stream"。 如果不定义,则表明您不知道它是什么,并将决定权留给接收器,接收器可以检查它是否像鸭子一样...RFC-7231
3.1.1.5。 内容类型如果没有Content-Type头字段,则接收方可以假定它为应用程序/八位字节流,但实际情况可能是其他东西。
我更喜欢使用application/unknown
,但结果肯定与application/octet-stream
相同。
application/octet-stream
文件是可执行的。即使浏览器确实在有意识地下载可执行文件,它也不会在未经用户同意的情况下"可能执行"它;仅仅下载一个可执行文件并不意味着我想要立即执行它。如果真的有一个浏览器可能会在下载时自动执行application/octet-stream
文件,请告诉我们是哪个浏览器,以及如何重现这种行为。现在我不相信你。 - Mark Amery