2010-12-10 6 views
8

Per un'applicazione Web ASP.NET 4.0/IIS7, desidero supportare le richieste HTTP compresse. Fondamentalmente, vorrei supportare i clienti che aggiungerebbero Content-Encoding: gzip nelle intestazioni delle richieste e comprimere il corpo di conseguenza.Come supportare richieste HTTP compresse in Asp.Net 4.0/IIS7?

Qualcuno sa come ottengo un simile comportamento?

Ps: riguardo, ho più endpoint REST e SOAP e si ritiene una soluzione migliore per supportare la compressione a livello HTTP anziché gli encoder personalizzati per ciascun endpoint.

risposta

5

Per coloro che potrebbero essere interessati, l'implementazione è piuttosto semplice con uno IHttpModule che filtra semplicemente le richieste in arrivo.

public class GZipDecompressModule : IHttpModule 
{ 
    public void Init(HttpApplication context) 
    { 
     context.BeginRequest += BeginRequest; 
    } 

    void BeginRequest(object sender, EventArgs e) 
    { 
     var app = (HttpApplication)sender; 

     if ("gzip" == app.Request.Headers["Content-Encoding"]) 
     { 
      app.Request.Filter = new GZipStream(
       app.Request.Filter, CompressionMode.Decompress); 
     } 
    } 

    public void Dispose() 
    { 
    } 
} 

Aggiornamento: Sembra che questo approccio innescare un problema in WCF, come WCF si basa sull'originale Content-Length e non il valore ottenuto dopo la decompressione.

+0

Ho avuto l'impressione che sia possibile configurare la compressione a livello di IIS piuttosto che all'interno dell'applicazione ospitata. Tuttavia non ne so molto, solo un suggerimento su google "IIS Compression" – e36M3

+2

La compressione HTTP classica si applica solo a ** risposte **, ecco le ** richieste ** che sto provando a comprimere. –

+0

Qualcosa di nuovo qui? – ver