IIS не использует gzip с IE, хотя заголовки говорят, что это должно - PullRequest
0 голосов
/ 25 января 2011

Использование 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?

1 Ответ

0 голосов
/ 25 января 2011

Когда я делаю запрос с использованием IE, я вижу этот context.Response.Filter == System.Web.HttpResponseStreamFilterSink.Когда я делаю запрос, используя Firefox или Chrome, я вижу этот context.Response.Filter == RadGZipStreamNet40.Согласно журналам IIS «Отслеживание невыполненных запросов» *, встроенное динамическое сжатие IIS вообще не запускается.Очевидно, Telerik решает, что вызовы из IE не должны быть сжаты, а вызовы из других браузеров должны быть.

Согласно документам:

RadCompression автоматически обнаруживает и сжимает запросы, которые ожидают следующие типы ответов контента: application / x-www-form-urlencoded application / json application / xml application/ atom + xml (источник: http://www.telerik.com/help/aspnet-ajax/radcompression.html)

Другие браузеры сообщают, что они принимают, среди прочего, «application / xml», поэтому RadCompress передает ответ. IE не сообщает, что принимает любой изэти вещи, так что это не так.

...