2010-09-28 3 views
1

Кто-нибудь знает, возможно ли сжать мои исходящие http-данные в IE? Я выполняю запросы ajax на сервер и хочу уменьшить объем трафика, чтобы ускорить работу моего приложения.Исходящие HTTP-сжатие данных

Спасибо, Егор

+0

Вы можете показать, какие данные вы обмениваете? – Neutralizer

+0

Если вы еще этого не сделали, я рекомендую посмотреть, как использовать JSON для обмена данными AJAX. MVC имеет функции, которые делают работу с JSON очень простой. – BradB

+0

Я использую JSON для своих запросов, но иногда он большой (около 60 кбайт). Итак, я хочу сжать его – Egor4eg

ответ

2

Ниже приведен общий способ создать атрибут сжатия фильтра:

public class CompressFilter : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext actionContext) 
    { 
     HttpRequestBase request = actionContext.HttpContext.Request; 

     string acceptEncoding = request.Headers["Accept-Encoding"]; 

     if (!string.IsNullOrWhiteSpace(acceptEncoding)) 
     { 
      acceptEncoding = acceptEncoding.ToLowerInvariant(); 
      HttpResponseBase response = actionContext.HttpContext.Response; 

      if (acceptEncoding.Contains("gzip")) 
      { 
       response.AddHeader("Content-encoding", "gzip"); 
       response.Filter = new GZipStream(response.Filter, CompressionMode.Compress); 
      } 
      else if (acceptEncoding.Contains("deflate")) 
      { 
       response.AddHeader("Content-encoding", "deflate"); 
       response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress); 
      } 
     } 
    } 
} 

Теперь вы можете украсить ваш контроллер с атрибутом [CompressFilter]. Он добавит заголовок сжатия в ответ для поддерживающих его браузеров, которые IIS заберет. Если вы включили динамическое сжатие, IIS затем выдает сжатые ответы.

+0

Этот код позволяет сжать ответ сервера. Но я хочу сжать запрос. – Egor4eg

+0

AFAIK, ни один браузер не может неявно сжимать запросы запросов. Я полагаю, что вы можете сделать, это найти javascript-библиотеку сжатия и отправить сжатые с клиента данные на сервер и вручную распаковать их там. Вероятно, накладные расходы, которые это будет стоить на клиенте, - это больше, чем время сохранения данных. – Carvellis

+0

да, вероятно, это будет стоить больше времени. Но я должен проверить это. Знаете ли вы какие-либо библиотеки javascript, которые позволяют это делать? – Egor4eg

Смежные вопросы