Использование Internet Explorer 8, Firefox 3.6, Chrome 8 и IIS 7.5 на Win7 x64 box.
Я подаю файл с помощью IHttpHandler (.NET 4).
По словам Фиддлера, в моем запросе IIS от IE8 говорится, что он принимает 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
Обратите внимание, что это не gzipped.
Однако в 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
Chrome похож на Firefox. Он запрашивает gzip и gzip возвращается. По размеру контента, отображаемому в Fiddler, я вижу, что тело, по сути, сжато для Chrome и Firefox, но не для IE.
У меня в IIS установлено «Включить динамическое сжатие содержимого» (а также статическое сжатие содержимого). Мой IHttpHandler не делает ничего особенного со сжатием и не запускает разный код для разных браузеров. Я искал источник для своего проекта, и я не вижу никаких упоминаний о "gzip", поэтому я не понимаю, как я мог случайно с ним взломать.
Как я могу выяснить, почему IIS не отправляет сжатые данные в IE?