4

データ エクスポート サイトのすべての動的コンテンツを圧縮する必要があります。
私は多くの方法を試しましたが、何もうまくいきません。Chrome は、コンテンツが圧縮されておらず、「Content-Encoding」ヘッダーが存在しないことを示しています。

最後の手段として(応答を書き込む前に)次のようにしようとしています。

        context.Response.Filter = new DeflateStream(context.Response.Filter, CompressionMode.Compress);
        context.Response.AppendHeader("Content-Encoding", "deflate");

ロギングは、このコードが正しく実行されたことを示しています。ただし、Chrome はコンテンツが圧縮されていないことを示しています。

IIS 組み込みの圧縮を使用している場合の UPD は機能しているようで、リクエスト トレースは "DYNAMIC_COMPRESSION_SUCCESS" を示します。ただし、IE は依然として応答が圧縮されていないことを示しています。localhost 名を使用してサーバー自体からページを要求している場合も同じです。

何か案は?

4

3 に答える 3

4

これを手動で行う場合は、最初に圧縮がサポートされていることを確認してください。

public static bool IsGZipSupported()
{
    string AcceptEncoding = HttpContext.Current.Request.Headers["Accept-Encoding"];
    if (!string.IsNullOrEmpty(AcceptEncoding) &&
            (AcceptEncoding.Contains("gzip") || AcceptEncoding.Contains("deflate")))
        return true;
    return false;
}

そして、あなたの応答を圧縮し、

public static void GZipEncodePage()
{
            if (IsGZipSupported()) {
                HttpResponse Response = HttpContext.Current.Response;

                string AcceptEncoding = HttpContext.Current.Request.Headers("Accept-Encoding");
                if (AcceptEncoding.Contains("gzip")) {
                    Response.Filter = new System.IO.Compression.GZipStream(Response.Filter, System.IO.Compression.CompressionMode.Compress);
                    Response.AppendHeader("Content-Encoding", "gzip");
                } else {
                    Response.Filter = new System.IO.Compression.DeflateStream(Response.Filter, System.IO.Compression.CompressionMode.Compress);


            Response.AppendHeader("Content-Encoding", "deflate");
}

ヘッダーがクライアントに送信される直前にフィルターが接続されていることを確認できます

protected void Application_PreSendRequestHeaders()
{
    HttpResponse response = HttpContext.Current.Response;
    if (response.Filter is GZipStream && response.Headers["Content-encoding"] != "gzip")
        response.AppendHeader("Content-encoding", "gzip");
    else if (response.Filter is DeflateStream && response.Headers["Content-encoding"] != "deflate")
        response.AppendHeader("Content-encoding", "deflate");
}

詳細については、この投稿を確認してください。

于 2012-06-30T16:58:22.043 に答える
4

これを手動で行う代わりに、IIS に組み込まれている事前に作成された (およびテスト済みの) Microsoft コードに依存します。

Dynamic Content Compression をマシンにインストールし (リンクの箇条書き 5) 、IIS で有効にします。IIS は、静的コンテンツと動的コンテンツの両方の圧縮を処理するようになりました。維持するコードが少ない (そして常にバグがある) ことは、常に良いことです!

于 2012-06-22T06:28:00.190 に答える
-1

IIS7+ を使用している場合は、圧縮オプションがあります。サイトに移動し、右側のメイン ウィンドウで [圧縮] をクリックし、次の 2 つのチェックボックスをすべてオンにします。

  1. 動的コンテンツ圧縮を有効にする
  2. 静的コンテンツ圧縮を有効にする
于 2012-07-02T06:21:07.820 に答える