2010-12-10 35 views
8

Đối với ứng dụng web ASP.NET 4.0/IIS7, tôi muốn hỗ trợ các yêu cầu HTTP được nén HTTP. Về cơ bản, tôi muốn hỗ trợ khách hàng có thể thêm Content-Encoding: gzip vào tiêu đề yêu cầu và nén phần thân theo đó.Làm thế nào để hỗ trợ các yêu cầu HTTP nén trong Asp.Net 4.0/IIS7?

Có ai biết cách tôi đạt được hành vi như vậy không?

Ps: liên quan, tôi có nhiều điểm cuối REST và SOAP và cảm thấy giải pháp tốt hơn để hỗ trợ nén ở cấp HTTP thay vì bộ mã hóa tùy chỉnh cho mỗi điểm cuối.

Trả lời

5

Đối với những người có thể quan tâm, việc triển khai khá đơn giản với IHttpModule chỉ đơn giản là lọc các yêu cầu đến.

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

Cập nhật: Dường như phương pháp này gây ra một vấn đề trong WCF, như WCF dựa trên bản gốc Content-Length và không phải là giá trị thu được sau khi giải nén.

+0

Tôi đã ấn tượng rằng có thể định cấu hình nén ở cấp IIS thay vì trong ứng dụng được lưu trữ của bạn. Tuy nhiên tôi không biết nhiều về nó, chỉ cần một đề nghị google "IIS nén" – e36M3

+2

nén HTTP cổ điển chỉ áp dụng cho ** phản hồi **, đây là ** yêu cầu ** tôi đang cố nén. –

+0

Có gì mới ở đây không? – ver

Các vấn đề liên quan