IIS网站正在为zip文件发送多个内容类型标题
我们的IIS5服务器有问题 当某些用户/浏览器单击下载.zip文件时,浏览器窗口中有时会呈现二进制乱码文本。所需的行为是下载文件或使用相关的zip应用程序打开文件 最初,我们怀疑文件上设置了错误的内容类型头。IIS技术人员确认IIS正在为mime类型为“application/x-zip-compressed”的.zip文件提供服务 然而,使用Wireshark检查HTTP数据包发现,对zip文件的请求返回两个内容类型头IIS网站正在为zip文件发送多个内容类型标题,iis,zip,content-type,mime-types,iis-5,Iis,Zip,Content Type,Mime Types,Iis 5,我们的IIS5服务器有问题 当某些用户/浏览器单击下载.zip文件时,浏览器窗口中有时会呈现二进制乱码文本。所需的行为是下载文件或使用相关的zip应用程序打开文件 最初,我们怀疑文件上设置了错误的内容类型头。IIS技术人员确认IIS正在为mime类型为“application/x-zip-compressed”的.zip文件提供服务 然而,使用Wireshark检查HTTP数据包发现,对zip文件的请求返回两个内容类型头 内容类型:text/html; 字符集=UTF-8 内容类型: 应用程序
- 内容类型:text/html; 字符集=UTF-8
- 内容类型: 应用程序/x-zip-compressed
有没有什么地方可以让IIS技术人员查看?或者我们可以检查配置文件吗?我相信——我可能错了,http 1.1头发送多个头定义,而最具体的头具有优先权 因此,在您的示例中,它发送2个text/html,然后是application/x-zip-commercial,因此第二个将是最具体的-如果无法在客户端上处理,则使用更通用的一个(本例中的第一个)—— 我已经通读了你所说的这几点,但不确定这是否真的发生了
当然,我在这里可能完全错了请确保没有设置任何ISAPI过滤器或ASP.net HTTP模块来重写标头。如果他们不检查标题是否已经存在,则将追加而不是替换标题。不久前,我们遇到内部身份验证模块无法正确更新标头的问题,因此我们得到了两个授权标头,一个来自IIS,另一个来自我们的模块。服务器上安装了什么软件来处理.zip文件?
如果IIS从注册表中获取MIME翻译,可能您使用的zip软件已经注册了MIME类型。这并不能解释为什么IIS会使用两个内容类型头进行响应,因此任何ISAPI筛选器和其他Mime表都是可疑的。这可能与此有关。这表明IIS可能正在压缩已经压缩的文件,但一些浏览器只是直接向提供坏数据的辅助应用程序推卸责任(因为它已经压缩了两次). 如果将zip扩展的mime类型更改为application/octet流,则可能不会发生这种情况 听起来您的IIS配置可能有问题。然而,这是不可能从你的帖子,如果这是事实 您可以在IIS的多个级别上配置mime类型。我的IIS 5知识有点生疏,据我记忆所及,IIS 6的这种行为也是一样的。我试图在IIS6环境中模拟这种情况,但根据接受的头,只收到一种mime类型 我已将站点上zip文件的标题设置为application/x-zip-compressed,并将文件的标题设置为explicity
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
tinyget-srv:dev.24.com-uri:/helloworld.zip-tbLoadSecurity
WWWConnect::Connect(“server.domain.com”、“80”)
IP=“127.0.0.1:80”
源端口:1581
请求:**************
GET/helloworld.zip HTTP/1.1
主机:server.domain.com
接受:*/*
答复:**************
HTTP/1.1200ok
内容长度:155
内容类型:text/html
最后修改:2009年4月29日星期三08:43:10 GMT
接受范围:字节
ETag:“747da786a6c8c91:0”
服务器:Microsoft IIS/6.0
日期:2009年4月29日星期三10:47:10 GMT
PK??
? ? ? helloworld.txthello worldPK
? ? ? ? helloworld.txtPK???<7.你好,世界样本
WWWConnect::Close(“server.domain.com”、“80”)
封闭源端口:1581
然而,我觉得这证明不了什么。然而,它确实提出了几个问题:
我也遇到过类似的问题。我在IIS 6上测试下载,不明白为什么一个名为test.zip的压缩文件在IE8中显示为文本(在其他浏览器中可以下载) 然后我意识到为了测试我压缩了一个非常小的文本文件。我的猜测是IE嗅探了文件,看到了文本(由于大小较小,文本几乎没有压缩),并确定它是纯文本 我用一个更大的文件再试了一次,下载提示在IE8中显示为OK 可能与你的案子无关,但我想我会提到的
Tim这些文件是由IIS直接提供的,还是请求中涉及类似ASP.NET的内容?据我所知,ASP.NET没有处理.ZIP文件的请求。它们似乎直接由IIS提供服务。您能否列出IIS正在运行的任何ISAPI筛选器?上下文类型重新映射可能有问题。您在哪里运行wireshark?IIS和添加内容类型标头的浏览器之间可能存在“透明”代理或类似服务。我正在从web服务器请求ZIP文件的客户端计算机上运行wireshark。rfc对此没有说明。并且不确定您如何推断application/x-zip-commercial比text/html更具体。Accept标头具有您所指的功能,在这种情况下,application/x-zip-commercial比application/*和