微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

asp.net – 在代码GZipping中的IIS压缩?

我正在添加gzipping到我的.net 4站点的所有静态内容和html输出.

我还在IIS 7.5中启用了压缩(静态和动态),我发现在IIS中启用压缩会覆盖我的vary:Accept-Encoding标头以获取这些资源.

所以,我想知道的是,是否真的需要在IIS中启用压缩,因为我已经在解压缩了东西?

所以,我做了一些测试,我发现如下:

Utilizing IIS Static and Dynamic Compression,with code compression:
cpu Load: 35%
Memory Load: 28M

Utilizing IIS Static and Dynamic Compression,without code compression:
cpu Load: 34%
Memory Load: 28M

Non-Utilizing Static and Dynamic Compression In IIS,with code compression:
cpu Load: 14%
Memory Load: 32M

因此,基于我的发现,我同意,在代码中执行此操作时,无需使用IIS压缩.即使内存消耗略高,cpu负载也要低得多,以使代码内压缩更有效地提供文件.

现在,我的全部意义是找出并摆脱IIS覆盖vary:Accept-Encoding标头.哪个,似乎在启用或不启用IIS压缩时没有效果.标题仍然没有添加…所以,你能帮忙吗?

这是我正在实现的缓存的代码,请注意,在触发包含此代码方法之前,我通过context.Response.ClearHeaders()清除标头:

With context.Response
        .AddHeader("Cache-Control","store,cache")
        .AddHeader("Pragma","cache")
        .AddHeader("Cache-Control","max-age=21600")
        .AddHeader("ETag",Date.Now.Ticks)
        .AddHeader("Expires",DateTime.Now.AddYears(1).ToString("ddd,dd MMM yyyy hh:mm:ss") + " GMT")
        .AddHeader("vary","Accept-Encoding")
        .AppendHeader("vary","Accept-Encoding")
        .Cache.SetvaryByCustom("Accept-Encoding")
        .Cache.SetomitvaryStar(True)
        .Cache.varyByParams.IgnoreParams = True
        .Cache.SetAllowResponseInbrowserHistory(True)
        .Cache.SetCacheability(Web.HttpCacheability.Public)
        .Cache.SetValidUntilExpires(True)
        .Cache.SetLastModified(DateTime.Now.AddYears(-1).ToString("ddd,dd MMM yyyy hh:mm:ss") + " GMT")
        .CacheControl = "public" '
        .Expires = 24 * 60 * 366
        .ExpiresAbsolute = DateTime.Now.AddYears(1).ToString("ddd,dd MMM yyyy hh:mm:ss") + " GMT"
    End With

解决方法

您需要具体了解在代码中应用压缩的MIME类型.然后,您可以禁用这些MIME类型的IIS压缩.

您的.config文件看起来应该与下面的文件大致相同.您将注意到所有列出的MIME类型压缩都已应用.明智地在代码或IIS中关闭MIME类型的压缩,使得代码中压缩的内容不会被IIS压缩,反之亦然.

例如,如果您的HTML全部用代码压缩,您可以指定:

<add mimeType="text/html" enabled="false" />

摘自applicationHosts.config文件

<system.webServer>
<httpCompression
    directory="%systemDrive%\inetpub\temp\IIS Temporary Compressed Files"
    dynamicCompressiondisablecpuUsage="90"
    dynamicCompressionEnablecpuUsage="80"
    maxdiskSpaceUsage="100" minFileSizeforComp="2700"
    noCompressionForRange="true"
    sendCacheHeaders="false"
    staticCompressiondisablecpuUsage="100"
    staticCompressionEnablecpuUsage="80"
    >
    <scheme name="gzip"
        dll="%Windir%\system32\inetsrv\gzip.dll"
        dynamicCompressionLevel=”4”
        staticCompressionLevel=”7” />
    <dynamicTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/javascript" enabled="true" />
        <add mimeType="application/json" enabled="true" />
        <add mimeType="application/xml" enabled="true" />
        <add mimeType="*/*" enabled="false" />
    </dynamicTypes>
    <staticTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/javascript" enabled="true" />
        <add mimeType="application/json" enabled="true" />
        <add mimeType="application/atom+xml" enabled="true" />
        <add mimeType="application/RSS+xml" enabled="true" />
        <add mimeType="application/xaml+xml" enabled="true" />
        <add mimeType="application/xml" enabled="true" />
        <add mimeType="image/svg+xml" enabled="true" />
        <add mimeType="*/*" enabled="false" />
    </staticTypes>
</httpCompression>
<urlCompression doDynamicCompression="true"
    dynamicCompressionBeforeCache=”true” />
</system.webServer>

请注意,如果修改applicationHosts.config,它会影响服务器上的所有网站,因此您需要注意,任何不在代码中应用压缩的网站都不会被压缩.

还要注意,通常不应压缩二进制内容(即图像,视频).这些资源已经在各自的容器中压缩(即.JPG,.MP4).确保您没有压缩已压缩的内容类型.

我已经写了更多有关压缩设置的详细信息,您可以在我的答案中查看:https://stackoverflow.com/a/10051876/733805.

原文地址:https://www.jb51.cc/aspnet/247342.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐