IIS网站正在为zip文件发送多个内容类型标头

时间:2009-04-09 21:10:44

标签: iis zip content-type mime-types iis-5

我们遇到IIS5服务器问题。

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

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

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

  • Content-Type:text / html; 字符集= UTF-8
  • 内容类型: 应用程序/ x-ZIP压缩的

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

我们有什么特别的地方可以让IIS技术人员看看吗?或者我们可以检查一个配置文件吗?

6 个答案:

答案 0 :(得分:0)

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

所以在你的例子中,它发送2个text / html然后是application / x-zip-commercial,所以第二个将是最具体的 - 如果不能在客户端上处理,那么使用更普遍的一个(在这种情况下的第一个) -

我已经阅读了这篇http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html,并指出了你所说的内容 - 不确定这是否真的发生了。

当然,我可能完全错了

答案 1 :(得分:0)

确保您没有设置任何ISAPI筛选器或ASP.net HTTP模块来重写标头。如果他们不检查标题是否已存在,则将附加而不是替换。我们之前遇到过一个问题,内部认证模块没有正确更新标题,因此我们获得了两个授权标题,一个来自IIS,另一个来自我们的模块。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

这可能与此knowledge base article.有关。这表明IIS可能正在压缩已经压缩的文件,但有些浏览器只是直接转到辅助应用程序,为您提供错误的数据(因为它已被压缩两次) 。如果您将zip扩展名的mime类型更改为 application / octet-stream ,则可能不会发生这种情况。

答案 4 :(得分: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. 我想知道fiddler会显示什么?

答案 5 :(得分:0)

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

然后我意识到,为了测试,我压缩了一个非常小的文本文件。我的猜测是IE浏览了文件,看到了文本(因为体积小而几乎没有压缩)并且认为它是纯文本。

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

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