所以我在Windows 10笔记本电脑上本地运行了一个ASP.NET MVC 5站点,并在web.config中进行了以下设置。
在发布配置中编译,调试模式关闭:
<compilation debug="false" targetFramework="4.5.2" />
和使用max-age的Cache-Control标头:
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" />
</staticContent>
但无论我做什么,我总是看到Cache-Control:private
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
我关闭了所有模块,并运行了一个失败的跟踪请求,显示标题已设置:
但我无法追踪有关此 ManagedPipelineHandler 的任何信息,该信息似乎是设置标头的模块。
我尝试将Cache-Control添加为自定义标头:
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
<remove name="Cache-Control" />
<add name="Cache-Control" value="public, max-age=1800, must-revalidate" />
</customHeaders>
</httpProtocol>
但这仅附加到现有的私人设置:
HTTP/1.1 200 OK
Cache-Control: private,public, max-age=1800, must-revalidate
Content-Type: text/html; charset=utf-8
我的 runAllManagedModulesForAllRequests 设置为false,其他帖子建议可能是原因。
我知道我可以在代码中设置此标题,但我很想知道什么&amp;为什么强迫私人&#34;私人&#34;设置。
有人可以提供建议吗?
更新
Something is forcing responses to have cache-control: private in IIS7
因此,当没有用于请求的输出缓存(并且启用了输出缓存)时,这是.NET的默认行为。如果将&amp;的sendCacheControlHeader属性设置为false在web.config中 - 你没有得到Cache-Control:私有标题!
奇怪的是,您仍然无法根据节点获得正确的Cache-Control标头 - 但您可以通过该部分控制标头,因此现在可以使用:
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
<add name="Cache-Control" value="max-age=30,public" />
</customHeaders>
</httpProtocol>
答案 0 :(得分:1)
在这种情况下缓存由.NET和MVC应用程序控制,这正是推动私有&#34;值。要控制此值,通常会使用适当的缓存行为来修饰控制器或操作:
如果未设置缓存值,则&#34;私有&#34; value是MVC使用的默认值。如果要全局应用缓存设置,则可以在应用程序初始化期间创建过滤器并将其应用于全局过滤器。