如何使用HTTP标头缓存动态CSS?

时间:2014-03-30 22:59:24

标签: php css wordpress caching dynamic-css

这是this question的直接副本,但提供的解决方案不起作用。

作为我维护的WordPress插件的一部分,我正在使用以下代码吐出动态CSS文件:

public static function buildCustomCss() {
  if (1 == intval(get_query_var(self::$query_var))) {
     ob_start();
        global $css;
        $expires = 60 * 60 * 24 * 365; // cache for a year

        header('Pragma: public');
        header('Cache-Control: maxage=' . $expires);
        header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $expires) . ' GMT');
        header('Content-type: text/css');

        echo str_replace('>', '>', esc_html($css));
     ob_end_flush();
     exit;
  }
}

使用的标头值与上述引用问题中使用的标头值相匹配,但Chrome AND Firefox都拒绝接受缓存请求。我尝试了多台服务器,每次都会响应200响应。我希望这可以证明是一个更好的解决方案,而不仅仅是将CSS放入主页面,但如果我不能让缓存工作,那么它最终会变得更糟。

请求标头的完整列表(Chrome):

Accept:text/css,*/*;q=0.1
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Cookie:<cookie values>
DNT:1
Host:example.org
Referer:http://example.org/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36

响应标头的完整列表(已编辑为包括已测试的最新标头,包括publicpragma 中的cache-control):

Cache-Control:no-transform,public,maxage=31536000
Connection:keep-alive
Content-Type:text/css; charset=UTF-8
Date:Sun, 30 Mar 2014 22:55:57 GMT
Expires:Mon, 30 Mar 2015 22:55:56 GMT
Pragma:public
Server:nginx
Transfer-Encoding:chunked

1 个答案:

答案 0 :(得分:0)

如果您希望浏览器缓存文件,则应将Cache-control标头设置为public:

header('Cache-control: public');