0

私は人々がブラウザの要求がhttp圧縮をサポートしているかどうかをただ検出するのを見ました。サポートされている場合は、サポートgzipまたはdeflateを検出します。

次に、次のような応答オブジェクトに属性を追加します。

HttpContext.Current.Response.AppendHeader("Content-encoding", "gzip");

また

HttpContext.Current.Response.AppendHeader("Content-encoding", "deflate");

誰が実際に応答を理解しているのかを知る必要があります。それはWebサーバーまたはasp.netワーカープロセスですか。誰がどのように応答を圧縮するかを詳しく調べてください。ありがとう

4

1 に答える 1

1

実際、ここに表示されているヘッダーは圧縮されていません。圧縮を行うのは、Response.Filterで設定したStreamクラスであり、この圧縮はAsp.Netによって次のように行われます。

    if (acceptEncoding.Contains("gzip"))
    {
        // gzip
        app.Response.Filter = new GZipStream(prevUncompressedStream, CompressionMode.Compress);
        app.Response.AppendHeader("Content-Encoding", "gzip");
    }       
    else if (acceptEncoding.Contains("deflate") || acceptEncoding == "*")
    {
        // deflate
        app.Response.Filter = new DeflateStream(prevUncompressedStream, CompressionMode.Compress);
        app.Response.AppendHeader("Content-Encoding", "deflate");
    }       

これを行った場合、圧縮はIISではなくasp.netによって行われます。次に、iisは、ファイルがすべて圧縮可能であり、再度圧縮されていないことを検出します。この検出が失敗し、ページがまったく表示されない場合があるため、この場合はiis圧縮を無効にします。

これは、asp.nethttp://msdn.microsoft.com/en-us/library/system.io.compression.gzipstream.aspx内にあるgZipStreamクラスです

したがって、asp.netの作業プロセスにより、GZipStreamを設定した場合、DeflateStreamの圧縮が行われました。

これは、GZipStreamhttp ://www.dotnetperls.com/gzipstreamを使用したasp.netによるファイル圧縮の例です 。

私はそれをより細かく制御できるので、iisではなくasp.netで圧縮を行うことを好みます。

于 2011-12-04T01:03:50.300 に答える