【问题标题】:asp.net mvc outputcache VaryByContentEncodingasp.net mvc outputcache VaryByContentEncoding
【发布时间】:2016-11-17 07:42:21
【问题描述】:

有人可以帮助解释 OutputCache VaryByContentEncoding 的用途,或者更好地举例说明它的用法。

我知道这与编码压缩有关。它会根据特定的压缩方案缓存不同的响应吗?我在网上搜索,但找不到有关此属性的详细信息。

【问题讨论】:

标签: asp.net asp.net-mvc


【解决方案1】:

这里现在有一个帮助文档,其中包含一个示例,解释了如何从缓存中检索输出或根据请求中存在的标头生成输出。

https://docs.microsoft.com/en-us/dotnet/api/system.web.httpcachepolicy.varybycontentencodings?view=netframework-4.8

也可以像这样作为属性添加到方法中:

        [OutputCache(Duration = 3600,
            Location = OutputCacheLocation.Server,
            VaryByParam = "id;page",
            VaryByContentEncoding = "gzip, deflate, br, compress"
        )]
        [HttpGet]
        public virtual async Task<ActionResult> Post(int id)
        {
           ...
        }

注意:我有VaryByContentEncoding = "gzip, deflate, br, compress" 这是在 .Net 4.6 中

尽管有文档,但使用分号分隔的列表似乎无法按预期工作,至少对于属性而言。我没有尝试过标记。

通过上述设置,我可以发送带有以下“Accept-Encoding”标头值的请求,并至少从 IIS Express 返回带有“Content-Encoding: gzip”的缓存响应。

  • 接受编码:gzip
  • 接受编码:gzip、放气
  • 接受编码:gzip、deflate、br
  • 接受编码:deflate、br、gzip

如果 属性 中的设置使用分号分隔列表,则从不缓存响应。这似乎工作:

    [OutputCache(Duration = 3600,
            Location = OutputCacheLocation.Server,
            VaryByParam = "id;page",
            VaryByContentEncoding = "gzip;deflate;br;compress"
     )]

发送不受支持的接受编码将按预期返回未压缩但仍缓存的响应。

  • 接受编码:br

注意:如果分号按预期分隔,则 VaryByParam 值确实有效。

【讨论】:

    猜你喜欢
    • 2018-02-01
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    相关资源
    最近更新 更多