2011-01-24 32 views
0

在Win7 x64盒子上使用Internet Explorer 8,Firefox 3.6,Chrome 8和IIS 7.5。尽管标头表示应该使用IIS,但IIS仍未使用gzip

我正在使用IHttpHandler(.NET 4)提供一个文件。

据提琴手,从IE8我的IIS的要求说,它接受的gzip,但它没有返回:
(注意,loc.portal.com实际上是127.0.0.1)

 
GET http://loc.portal.com/AdminCenter/FileHandler.ashx?ID=115 HTTP/1.1 
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, */* 
Accept-Language: en-US 
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDR; .NET4.0C; .NET4.0E; MS-RTC LM 8; InfoPath.3) 
Accept-Encoding: gzip, deflate 
Connection: Keep-Alive 
Host: loc.portal.com 
Cookie: LoginName=; ASP.NET_SessionId=d5qiw5nubkjd2r00gnebg3ar; .ASPXAUTH=BAEA blah blah 

头返回从IIS到IE:

 
HTTP/1.1 200 OK 
Cache-Control: private 
Transfer-Encoding: chunked 
Content-Type: application/msword 
Server: Microsoft-IIS/7.5 
Content-Disposition: attachment; filename="Roll Worksheet.doc" 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
Date: Mon, 24 Jan 2011 20:53:34 GMT 

注意它没有被压缩。

与Firefox,但该请求是这样的:

 
GET http://loc.portal.com/AdminCenter/FileHandler.ashx?ID=115 HTTP/1.1 
Host: loc.portal.com 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 115 
Connection: keep-alive 
Referer: http://loc.portal.com/sb.cn 
Cookie: ASP.NET_SessionId=hw104pctkzrdtciwg4ihriqx; .ASPXAUTH=4FBB blah blah 

的响应,正确地说,它返回的gzip:

 
HTTP/1.1 200 OK 
Cache-Control: private 
Transfer-Encoding: chunked 
Content-Type: application/msword 
Content-Encoding: gzip 
Server: Microsoft-IIS/7.5 
Content-Disposition: attachment; filename="Roll Worksheet.doc" 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
Date: Mon, 24 Jan 2011 20:55:07 GMT 

铬类似于Firefox浏览器。它要求gzip并返回gzip。我可以通过Fiddler中显示的内容大小来看到,实际上,对于Chrome和Firefox,身体实际上是gzip,而不是IE。

我有“启用动态内容压缩”(以及静态内容压缩)在IIS中设置。我的IHttpHandler没有对压缩做任何特殊的处理,也没有针对不同的浏览器运行不同的代码。我搜索了我的项目的源代码,并且根本没有看到任何“gzip”的提及,所以我没有看到我可能会不小心沾上它。

我怎样才能找出为什么IIS不发送gzip的数据到IE?

+0

重要吗?IE用户习惯于减慢加载页面的速度,因此额外的秒数不会产生任何影响。哦,这属于ServerFault。 :) – 2011-01-24 22:41:59

回答

0

当我使用IE做出请求时,我看到context.Response.Filter == System.Web.HttpResponseStreamFilterSink。 当我使用Firefox或Chrome发出请求时,我会看到context.Response.Filter == RadGZipStreamNet40。 根据IIS“失败的请求追踪”日志*,内置的IIS动态压缩根本没有触发。显然Telerik认为来自IE的呼叫不应该被压缩,并且来自其他浏览器的呼叫应该是。

根据该文档:

RadCompression会自动检测并压缩该期望这些内容响应类型的请求: 应用/ X WWW的窗体-urlencoded 应用/ JSON 应用/ XML 应用/原子+ XML (来源:http://www.telerik.com/help/aspnet-ajax/radcompression.html

的其他浏览器正在报告他们接受,除其他外, “应用程序/ xml” 的这样RadCompress的gzip响应。 IE不报告它接受任何这些东西,所以它不会。

相关问题