1

我们的 IIS5 服务器有问题。

某些用户/浏览器单击下载 .zip 文件时,有时会在浏览器窗口中呈现二进制乱码文本。所需的行为是让文件下载或使用关联的 zip 应用程序打开。

最初,我们怀疑文件上设置了错误的内容类型标头。IIS 技术人员确认 .zip 文件由 IIS 提供,mime 类型为“application/x-zip-compressed”。

但是,使用 Wireshark 对 HTTP 数据包的检查表明,对 zip 文件的请求会返回两个Content-Type 标头。

  • 内容类型:文本/html;字符集=UTF-8
  • 内容类型:application/x-zip-compressed

知道为什么 IIS 发送两个内容类型标头吗?常规 HTML 或图像文件不会发生这种情况。ZIP 和 PDF 确实会发生这种情况。

我们可以要求 IIS 技术人员查看特定的位置吗?或者是否有我们可以检查的配置文件?

4

6 回答 6

0

这可能与这篇知识库文章有关。 这表明 IIS 可能正在对已经压缩的文件进行 gzip 压缩,但有些浏览器只是直接向辅助应用程序发送错误数据(因为它已被压缩两次)。如果您将 zip 扩展的 mime 类型更改为application/octet-stream,这可能不会发生。

于 2009-04-28T23:28:28.223 回答
0

听起来您的 IIS 配置可能存在问题。但是,如果是这种情况,则无法从您的帖子中看出。

您可以在 IIS 上的多个级别上配置 mime 类型。我的 IIS 5 知识有点生疏,据我所知,这种行为与 IIS 6 相同。我试图在 IIS 6 环境中模拟这一点,但根据接受的标头只收到一种 mime 类型

我已将站点上 zip 文件的标头设置为 application/x-zip-compressed 并且对于我已明确将其设置为的文件

tinyget -srv:dev.24.com -uri:/helloworld.zip -tbLoadSecurity
WWWConnect::Connect("server.domain.com","80")
IP = "127.0.0.1:80"
source port: 1581

REQUEST: **************
GET /helloworld.zip HTTP/1.1
Host: server.domain.com
Accept: */*


RESPONSE: **************
HTTP/1.1 200 OK
Content-Length: 155
Content-Type: text/html
Last-Modified: Wed, 29 Apr 2009 08:43:10 GMT
Accept-Ranges: bytes
ETag: "747da786a6c8c91:0"
Server: Microsoft-IIS/6.0
Date: Wed, 29 Apr 2009 10:47:10 GMT

PK??
?   ?   ?   helloworld.txthello worldPK??¶
?   ?   ?       ?         helloworld.txtPK??    ? ? <   7   ? hello world sample
WWWConnect::Close("server.domain.com","80")
closed source port: 1581

但是我觉得这证明不了多少。然而,它确实提出了几个问题:

  1. 服务器上设置的所有 mime 映射是什么(向服务器管理员询问 metabase.xml 文件,然后您可以确保他没有错过某些设置)
  2. 这些客户端是否在您控制的网络上?可能不是,我想知道您的服务器和客户端之间可能有什么代理服务器
  3. IIS 日志的外观如何,对于该请求,我对 Accept 标头特别感兴趣。
  4. 我想知道提琴手会展示什么?
于 2009-04-29T11:09:50.720 回答
0

我遇到过类似的问题。我在 IIS 6 上测试下载,但无法弄清楚为什么名为 test.zip 的压缩文件在 IE8 中显示为文本(在其他浏览器中很好,可以下载)。

然后我意识到为了测试我压缩了一个非常小的文本文件。我的猜测是 IE 嗅探了文件,看到了文本(由于体积小,几乎没有压缩)并确定它是纯文本。

我再次尝试使用更大的文件,下载提示在 IE8 中显示正常。

可能与您的情况无关,但我想我会提到它。

蒂姆

于 2009-08-03T09:14:32.640 回答
0

我相信 - 我可能错了 http 1.1 标头发送多个标头定义并且最具体的具有优先权。

因此,在您的示例中,它发送 2 text/html,然后发送 application/x-zip-commercial,因此第二个将是最具体的-如果无法在客户端上处理,则使用更通用的一个(第一个在这种情况下 ) -

我已经阅读了这个http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html并且那种指向你所说的 - 不确定这是否是实际发生的事情。

当然我在这里可能完全错了

于 2009-04-23T22:47:18.567 回答
0

确保您没有设置任何 ISAPI 过滤器或 ASP.net HTTP 模块来重写标头。如果他们不检查标题是否已经存在,它将被追加而不是替换。不久前,我们遇到了一个内部身份验证模块没有正确更新标头的问题,因此我们得到了两个授权标头,一个来自 IIS,一个来自我们的模块。

于 2009-04-23T23:00:07.087 回答
0

服务器上安装了哪些软件来处理 .zip 文件?看起来IIS 从注册表中获取了 MIME 翻译,也许您使用的 zip 软件已经注册了 MIME 类型。这不能解释为什么 IIS 会响应两个内容类型的标头,因此任何 ISAPI 过滤器和其他 Mime 表都是可疑的。

于 2009-04-25T18:43:02.320 回答