如果人们的计算机可以根据文件的扩展名(.pdf、.mp3、.docx、.dotx 等)决定如何处理文件,那么为什么 Web 服务器和电子邮件应用程序还需要指定 MIME 类型?
如果您想以不同于默认方式传递文件(例如,将 .py 或 .html 文件显示为纯文本)或文件扩展名未在客户端计算机上注册,我认为这很有用,但在大多数情况下,如果我正在创建新的文件格式(例如 .foobaz)并希望人们能够在网络和电子邮件上共享这些文件,那么依靠客户端识别文件扩展名是否足够了?
答案1
MIME 类型明确指定了文件的预期用途。文件扩展名仅提示内容。两者都可能不正确。DOC 已被许多具有各种内部文件格式的文本编辑器使用。
伪造扩展名被广泛用于误导人们误以为文件类型。这可以用于各种恶意软件。它还可能导致安全漏洞。如果 myfile.txt 作为文本文件进行安全验证,然后通过内容检查作为可执行文件运行,则您的机器可能会受到感染。
Unix 使用可执行位来指示哪个文件可以运行。脚本可以以 bang 路径开头,指示哪个解释器应该执行它们。file 命令可用于相当可靠地确定带或不带扩展名的文件类型。
使用扩展名来识别哪个文件使用可能会导致歧义。如果我有 myfile.exe、myfile.com、myfile.bat 和 myfile.cmd,则如果我运行命令 myfile,它们就会运行。
答案2
你从错误的角度看待这个问题。
文件需要一个 mimetype,这样客户端才知道如何处理该文件。
您的问题也应该反过来:
如果我们可以通过 MIME 类型识别文件类型,为什么还需要文件扩展名?
答案可能是为了让人们通过查看名称更容易识别文件类型。在 Windows 上可能还有其他原因。
答案3
这只会发生在 Windows 世界中,在 Unix 世界中,文件不必有扩展名,它们由 MIME 类型标识。
答案4
由于小型和定制(定制设计)应用程序对于文件扩展名往往比较宽容。这可能导致使用文件扩展名来表示多种类型的文件。
由于无法保证文件扩展名与给定的文件类型相对应,因此接收方可能无法识别文件的类型,也无法获得正确的程序来打开它。
除了 MIME 类型之外,还有其他系统可以识别文件,例如 Magic Numbers。这意味着不需要文件扩展名。文件扩展名也可以由无法打开文件的用户重命名,这意味着他们可能会联系支持人员。