c# - 激活压缩后 .css 文件中的奇怪效果

标签 c# asp.net compression

昨天我在我的网站上激活了压缩,如下所示:

void context_BeginRequest(object sender, EventArgs e)
{

    HttpApplication app = (HttpApplication)sender;
    string encodings = app.Request.Headers.Get("Accept-Encoding");

    if (encodings == null)
        return;

    string url = app.Request.RawUrl.ToLower();           


    if (url.Contains(".js") || url.Contains(".aspx") || url.Contains(".css") || url.Contains("ajax.ashx"))
    {

        Stream baseStream = app.Response.Filter;
        encodings = encodings.ToLower();

        if (encodings.Contains("gzip"))
        {
            app.Response.Filter = new GZipStream(baseStream, CompressionMode.Compress);
            app.Response.AppendHeader("Content-Encoding", "gzip");
        }
        else if (encodings.Contains("deflate"))
        {
            app.Response.Filter = new DeflateStream(baseStream, CompressionMode.Compress);
            app.Response.AppendHeader("Content-Encoding", "deflate");
        }
    }
}

昨晚,人们提示网站的样式被破坏了。我在 Firefox 和 Chrome 中尝试了该网站并遇到了同样的问题,直到我进行了强制刷新,清除了缓存。

今天早上,我打开 Safari 以查看它在该浏览器中的外观,并检查了存储的样式表。这是顶行的一部分:

���`I�%&/m�{J�J��t��`$ؐ@�������iG#)�*��eVe]f@�흼��{����{����;�N'���?\fdl��J�ɞ!���?~|?"�~+M�m�?��{�7y����l]�餮���N���̛�x�Ϋ�Q�cMVg��

我认为要么是 Safari 试图解压缩一开始没有压缩的东西,要么是它收到了一个压缩文件但没有对其进行解码。

这是一次性问题吗,一旦我网站的访问者清除了他们的缓存就会被清除,还是我在编写 HttpCompression 函数时犯了错误?

最佳答案

试试这个:

   HttpApplication app = sender as HttpApplication;
        string acceptEncoding = app.Request.Headers["Accept-Encoding"];
        Stream prevUncompressedStream = app.Response.Filter;

        if (!(app.Context.CurrentHandler is Page ||
            app.Context.CurrentHandler.GetType().Name == "SyncSessionlessHandler") ||
            app.Request["HTTP_X_MICROSOFTAJAX"] != null)
            return;

        if (string.IsNullOrEmpty(acceptEncoding))
            return;

        acceptEncoding = acceptEncoding.ToLower();


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

关于c# - 激活压缩后 .css 文件中的奇怪效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7819219/

相关文章:

C# if else 语句

asp.net - 在 IIS7 中启用动态压缩是否值得?

php - 关于 PHP 和 gz 压缩

c# - 每个线程一个 SQLiteConnection?

c# - 后退按钮专注于列表操作

c# - DataReader + DropDownList ASP.NET 项目

java - 使用 deflater 压缩/解压缩字符串

c# - 在 .NET 中转换 AVI 视频

c# - 存储库、管道、业务逻辑和域模型——我如何将它们组合在一起?

javascript - Ajax 调用网页方法不起作用