我正在将gzip应用于所有静态内容和我的.NET 4站点的HTML输出。
我还启用了IIS 7.5中的压缩(静态和动态),但我发现启用IIS中的压缩会覆盖这些资源的Vary:Accept-Encoding头信息。
因此,我想知道是否真的需要在IIS中启用压缩,因为我已经在使用gzip进行压缩?
所以,我进行了一些测试,以下是我的发现:
我还启用了IIS 7.5中的压缩(静态和动态),但我发现启用IIS中的压缩会覆盖这些资源的Vary:Accept-Encoding头信息。
因此,我想知道是否真的需要在IIS中启用压缩,因为我已经在使用gzip进行压缩?
所以,我进行了一些测试,以下是我的发现:
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