我们的网络服务器上有一些文件,它们是有效的 zip 文件,但被另一个程序用作数据文件。但是,当使用 Internet Explorer 8 下载这些文件(通过单击 href 链接)时,它们会被重命名为 *.zip,因此它们不再与正确的程序相关联。
我可以在我们的网络服务器或下载页面的 html 上做些什么来阻止 IE 重命名这些文件?
FireFox 和 Chrome 将文件保留为原始名称,因此不存在此问题。
我们的网络服务器上有一些文件,它们是有效的 zip 文件,但被另一个程序用作数据文件。但是,当使用 Internet Explorer 8 下载这些文件(通过单击 href 链接)时,它们会被重命名为 *.zip,因此它们不再与正确的程序相关联。
我可以在我们的网络服务器或下载页面的 html 上做些什么来阻止 IE 重命名这些文件?
FireFox 和 Chrome 将文件保留为原始名称,因此不存在此问题。
首先是一些背景..
您的 Web 服务器正在使用一些 MIME 魔法来确定该文件是有效的 ZIP 存档。因此,它提供带有以下标头的 HTTP 响应:
当 IE8 收到文件时,它已经被告知它是一个 ZIP。然后,当它处于“基于内容而不是文件扩展名打开文件”的默认安全设置中时,它会从注册表中查找该内容类型的指定扩展名
HKEY_CLASSES_ROOT\MIME\Database\Content Type
。有几种方法可以攻击它。您可以修改上面本地机器上的两个变量中的任何一个。但我当然不建议尽可能更改本地机器设置——它很老套而且无法扩展。最好的解决方案是通过以下方式修改 Web 服务器:
为文件的原始扩展名设置静态 MIME 声明,以
application/octet-stream
. 这将提示文件以直接二进制形式交付,没有内容信息。提供带有标题的文件,
Content-Disposition: attachment
这将导致 IE 尊重 Web 服务器指定的文件名。不过,这可能不是那么简单,具体取决于您的平台。你是用IE8下载的吗?如果是这样,您需要将该站点添加到 IE8 中的受信任站点列表中才能正确下载。
显然 Internet Explorer 8 在命名文件时出于安全原因遵循服务器指定的 MIME 类型。
您可以尝试配置服务器的 mime 类型并添加“xyz”(替换为您的文件扩展名)或在 Internet Explorer 8 中停用此行为: