2010-09-28 34 views
1

Quelqu'un sait-il, est-il possible de compresser mes données http sortantes dans IE? J'effectue des requêtes ajax sur un serveur et je souhaite réduire la quantité de trafic afin d'accélérer mon application.Compression de données http sortante

Merci, Egor

+0

pouvez-vous montrer quel type de données vous échangez? – Neutralizer

+0

Si ce n'est déjà fait, je vous recommande d'utiliser JSON pour votre échange de données AJAX. MVC possède des fonctionnalités qui rendent le travail avec JSON très facile. – BradB

+0

J'utilise JSON pour mes requêtes, mais parfois il est gros (environ 60 kBytes). Donc, je veux le compresser – Egor4eg

Répondre

2

Ce qui suit est une façon courante de créer un attribut de filtre de compression:

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); 
      } 
     } 
    } 
} 

Maintenant, vous pouvez décorer votre contrôleur avec un attribut [CompressFilter]. Il ajoutera un en-tête de compression à la réponse pour les navigateurs qui le supportent, que IIS va détecter. Si vous avez activé la compression dynamique, IIS affiche les réponses compressées.

+0

Ce code permet de compresser la réponse du serveur. Mais je veux compresser la requête. – Egor4eg

+0

AFAIK, aucun navigateur n'est capable de compresser implicitement les appels de demande. Je suppose que vous pouvez trouver une bibliothèque de compression javascript et publier les données compressées par le client sur le serveur et les décompresser manuellement. Le surcoût que cela entraînerait pour le client est probablement supérieur au temps d'enregistrement des données. – Carvellis

+0

oui, probablement cela coûterait plus de temps. Mais je dois le vérifier. Connaissez-vous des bibliothèques javascript qui permettent de faire cela? – Egor4eg