Как я могу заставить ASP.NET AJAX отправлять свой ответ JSON со сжатием GZip?

У меня включено сжатие в IIS7, и оно работает должным образом для всех ответов, кроме тех, которые созданы ASP.NET AJAX. У меня есть веб-сервис, который предоставляет данные клиенту. Когда веб-служба вызывается напрямую, она правильно сжимается. Однако, когда он вызывается через ASP.NET AJAX, ответ JSON не сжимается.

Как я могу заставить ASP.NET AJAX отправлять свой ответ JSON со сжатием GZip?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
12
0
5 491
4

Ответы 4

Какой браузер вы используете? В IE 6 есть ошибка, вызывающая ошибки при сжатии. Итак, ASP.NET AJAX отключает сжатие в браузерах IE 6:

http://weblogs.asp.net/scottgu/archive/2005/06/28/416185.aspx

Кроме того, вы включили сжатие для файлов ASMX?

Как мы можем включить сжатие для файлов ASMX? Есть ссылки?

LCJ 11.09.2014 06:18

В последний раз я проверял, что сжатие - это то, что делает 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?

LCJ 11.09.2014 06:21

В общем, вы не хотите этого делать, если только вы не возражаете против того, чтобы на несколько порядков увеличить мощность сервера в своих приложениях ...

При этом проблемой становится не только ЦП сервера, но и ЦП клиента ....

Это заканчивается тем, что ваше приложение становится НАМНОГО медленнее, если вы GZip все свои ответы Ajax ...!

Очень важно отметить акцент на стороне клиента. Кроме того, помните, когда сжимать, а когда нет. Фактически, бывают случаи, когда сжатие фактически увеличивает объект перед распаковкой. Используя MVC, это можно сделать в любом приложении ASP.NET. Я создал аннотацию для действий моего контроллера, создав класс, унаследованный от ActionFilterAttribute. Внутри класса я извлекаю заголовок accept-encoding filterContext.HttpContext.Request.Headers ["Accept-Encoding"] ‌ и проверяю deflate или gzip. Если они присутствуют и соответствуют условиям моего бизнеса, я сдуваю или GZipStream.

Anthony Mason 27.04.2015 22:09

Другие вопросы по теме