2012-03-17 12 views
1

MVCでのこのサーバー応答ストリーム圧縮に関する疑問があります。実際に私自身のアクションフィルタ属性を使用して圧縮しています。IIS6でMVC3を使用したGzip圧縮

HomeControllerのHomeControllerの "Home"アクションにこのCompressFilterを添付してホームページ全体をロードしますが、firebugをチェックするとcontent-encoding:gzipは表示されません。サイズが18KByteでも大きすぎます。 URLはhttp://goo.gl/5v5yDであり、これはリクエスト/レスポンスヘッダーです:

Response headers 
----------------- 
Date Sat, 17 Mar 2012 18:58:49 GMT 
Server Microsoft-IIS/6.0 
X-Powered-By ASP.NET 
X-AspNet-Version 4.0.30319 
X-AspNetMvc-Version 3.0 
Cache-Control private, max-age=43200 
Expires Sun, 18 Mar 2012 06:58:48 GMT 
Last-Modified Sat, 17 Mar 2012 18:58:48 GMT 
Content-Type text/html; charset=utf-8 
Transfer-Encoding chunked 

Request headers 
----------------- 
User-Agent Mozilla/5.0 (Windows NT 6.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1 
Accept text/html,application/xhtml+xml,application/xml;q=0.9,q=0.8 
Accept-Language es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 
Accept-Encoding gzip, deflate 
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Connection keep-alive 
Cookie __utma=72740111.1981468378.1331490472.1331490472.1331490472.1; __utmz=72740111.1331490472.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none) 

は、これは私の圧縮フィルタのコードです:圧縮に機能しない理由

public class CompressionFilter : ActionFilterAttribute 
{ 
     const CompressionMode compress = CompressionMode.Compress; 
     public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      HttpRequestBase request = filterContext.HttpContext.Request; 
      string acceptEncoding = request.Headers["Accept-Encoding"]; 
      if (string.IsNullOrEmpty(acceptEncoding)) return; 
      acceptEncoding = acceptEncoding.ToUpperInvariant(); 
      HttpResponseBase response = filterContext.HttpContext.Response; 
      if (acceptEncoding.Contains("GZIP")) 
      { 
       response.AppendHeader("Content-encoding", "gzip"); 
       response.Filter = new GZipStream(response.Filter, CompressionMode.Compress); 
      } 
      else if (acceptEncoding.Contains("DEFLATE")) 
      { 
       response.AppendHeader("Content-encoding", "deflate"); 
       response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress); 
      } 
     } 
} 

あなたは知っていますか? ActionFilterの代わりにHttpFilterを使用してレスポンスを圧縮しようとする方が良いかもしれないと思っています。

+0

あなたは組み込みのIISない理由圧縮機能? – tugberk

+1

原因私はIIS 6を使用しています。私はそれがないと思いますよね?おかげさまで – Jose3d

答えて

1

本当ですか?あなたはそれを修正しましたか?たぶんあなたのページはリフレッシュされませんでした。 Ctrl-F5が完全に更新されます。私は正しい応答を得る。

FireFoxの放火魔:

Date Sat, 17 Mar 2012 19:29:58 GMT 
Server Microsoft-IIS/6.0 
X-Powered-By ASP.NET 
X-AspNet-Version 4.0.30319 
X-AspNetMvc-Version 3.0 
Content-Encoding gzip 
Cache-Control private, max-age=43200 
Expires Sun, 18 Mar 2012 07:29:58 GMT 
Last-Modified Sat, 17 Mar 2012 19:29:58 GMT 
Content-Type text/html; charset=utf-8 
Content-Length 4710 

クロームデバッグ:

Cache-Control:private, max-age=43200 
Content-Encoding:gzip 
Content-Length:4710 
Content-Type:text/html; charset=utf-8 
Date:Sat, 17 Mar 2012 19:27:20 GMT 
Expires:Sun, 18 Mar 2012 07:27:20 GMT 
Last-Modified:Sat, 17 Mar 2012 19:27:20 GMT 
Server:Microsoft-IIS/6.0 
X-AspNet-Version:4.0.30319 
X-AspNetMvc-Version:3.0 
X-Powered-By:ASP.NET 
+0

私はすべてを試しましたCtrl + F5 Ctrl + R、すべてのブラウザのキャッシュ、データ、何でも削除...ありがとう、Gzippedです! – Jose3d

+0

@ Jose3d - それは私にも起こるとき、私はそれが嫌い!ときどきブラウザはちょうどそれを行かせません:(良い仕事、あなたのコードはうまく動作します:) –

関連する問題