覆盖Azure网站上的缓存控制标头

时间:2016-05-20 20:19:59

标签: azure iis web-config azure-web-sites

我在Microsoft Azure上托管了一个Ghost博客。我想确保自己可以设置Cache-Control标头,因为现在它已将max-age设置为0。

我正在解决此问题的方法是删除自定义web.config(因为Azure网站使用IIS)。这就是我所拥有的:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <modules runAllManagedModulesForAllRequests="false">
        </modules>
        <staticContent>
            <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="1.00:00:00" />
        </staticContent>
        <httpProtocol>
            <customHeaders>
                <remove name="Cache-Control" />
                <add name="Cache-Control" value="public, max-age=99" />
            </customHeaders>
        </httpProtocol>
    </system.webServer>
</configuration>

但是,这实际上并没有删除原始Cache-Control标题,而是将我的值附加到它:

enter image description here

对我遗失的内容有任何见解?

1 个答案:

答案 0 :(得分:1)

这个问题的解决方案比我原先想象的要简单得多。虽然我在web.config中正确设置了标头,但服务器node.js配置正在强制执行自己的Cache-Control规则,该规则覆盖了我的规则。

\core\server\middleware中有一个名为cache-control.js的文件。里面有一个片段:

cacheControl = function cacheControl(options) {
    /*jslint unparam:true*/
    var profiles = {
            public: 'public, max-age=0',
            private: 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0'
        },
        output;

我需要做的就是将'public, max-age=0'调整到我想要的值。

这完全消除了对web.config的需求。