2010-12-10 14 views
8

Para una aplicación web ASP.NET 4.0/IIS7, me gustaría admitir las solicitudes comprimidas HTTP . Básicamente, me gustaría apoyar a los clientes que agregarían Content-Encoding: gzip en los encabezados de solicitud y comprimir el cuerpo en consecuencia.¿Cómo soportar solicitudes HTTP comprimidas en Asp.Net 4.0/IIS7?

¿Alguien sabe cómo logro este tipo de comportamiento?

Ps: en relación con, tengo varios puntos finales REST y SOAP, y se siente una mejor solución para admitir la compresión en el nivel HTTP en lugar de codificadores personalizados para cada punto final.

Respuesta

5

Para aquellos que puedan estar interesados, la implementación es bastante sencilla con un IHttpModule que simplemente filtra las solicitudes entrantes.

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() 
    { 
    } 
} 

Actualización: Parece que este enfoque desencadenar un problema en WCF, como WCF se basa en el original Content-Length y no el valor obtenido después de la descompresión.

+0

Tenía la impresión de que es posible configurar la compresión en el nivel IIS más bien dentro de la aplicación alojada. Sin embargo, no sé mucho al respecto, solo una sugerencia de google "Compresión de IIS" – e36M3

+2

La compresión HTTP clásica se aplica solo a ** respuestas **, aquí están las ** solicitudes ** que estoy tratando de comprimir. –

+0

¿Algo nuevo aquí? – ver

Cuestiones relacionadas