У меня включено сжатие в IIS7, и оно работает должным образом для всех ответов, кроме тех, которые созданы ASP.NET AJAX. У меня есть веб-сервис, который предоставляет данные клиенту. Когда веб-служба вызывается напрямую, она правильно сжимается. Однако, когда он вызывается через ASP.NET AJAX, ответ JSON не сжимается.
Как я могу заставить ASP.NET AJAX отправлять свой ответ JSON со сжатием GZip?
Какой браузер вы используете? В IE 6 есть ошибка, вызывающая ошибки при сжатии. Итак, ASP.NET AJAX отключает сжатие в браузерах IE 6:
http://weblogs.asp.net/scottgu/archive/2005/06/28/416185.aspx
Кроме того, вы включили сжатие для файлов ASMX?
В последний раз я проверял, что сжатие - это то, что делает IIS (при правильной настройке) - и, конечно же, когда браузер отправляет необходимые заголовки.
IIS7 использует кодировку содержимого, чтобы решить, нужно ли сжимать ответ (конечно, при условии, что браузер может принимать gzip). Они задаются в applicationHost.config, и по умолчанию список
<dynamicTypes>
<add mimeType = "text/*" enabled = "true" />
<add mimeType = "message/*" enabled = "true" />
<add mimeType = "application/x-javascript" enabled = "true" />
<add mimeType = "*/*" enabled = "false" />
</dynamicTypes>
Если вы вызываете веб-службу напрямую, ответ XML имеет тип содержимого text/xml
, который сжимается. При вызове AJAX ответ JSON имеет тип содержимого application/json
, поэтому он не сжимается. Добавление следующего в applicationHost.config должно исправить это ...
<add mimeType = "application/json" enabled = "true" />
Как мы можем это сделать в IIS6?
И Настройка типов файлов, сжимаемых IIS (IIS 6.0)
В общем, вы не хотите этого делать, если только вы не возражаете против того, чтобы на несколько порядков увеличить мощность сервера в своих приложениях ...
При этом проблемой становится не только ЦП сервера, но и ЦП клиента ....
Это заканчивается тем, что ваше приложение становится НАМНОГО медленнее, если вы GZip все свои ответы Ajax ...!
Очень важно отметить акцент на стороне клиента. Кроме того, помните, когда сжимать, а когда нет. Фактически, бывают случаи, когда сжатие фактически увеличивает объект перед распаковкой. Используя MVC, это можно сделать в любом приложении ASP.NET. Я создал аннотацию для действий моего контроллера, создав класс, унаследованный от ActionFilterAttribute. Внутри класса я извлекаю заголовок accept-encoding filterContext.HttpContext.Request.Headers ["Accept-Encoding"] и проверяю deflate или gzip. Если они присутствуют и соответствуют условиям моего бизнеса, я сдуваю или GZipStream.
Как мы можем включить сжатие для файлов ASMX? Есть ссылки?