在《Drupal网站接入CDN》和《MediaWiki网站接入CDN》中,为了让Cloudflare和百度云加速缓存html页面,都是修改了header中的Cache Control:
- Drupal站:在html.tpl.php中添加header("Cache-Control: public, max-age=7200, s-maxage=3600");
- MediaWiki站:修改includes/OutputPage.php中的$response->header("Cache-Control: private, must-revalidate, max-age=0");
而现在我们发现一些json数据或者api调用的时候并没有被百度云加速缓存,这些json数据和api调用并没有通过html.tpl.php和OutputPage.php,所以上面的设置办法无效。Cloudflare没有这个问题,依然可以缓存json数据或者api调用内容,只有百度云加速有这个问题。
我先尝试了在百度云加速中添加页面规则、修改Apache Conf文件设置Header Cache Control、修改Drupal Views页面header的php代码,都没有解决。今天和同事再一起尝试,终于是找到了解决办法:
- Drupal网站修改settings.php,添加drupal_add_http_header('Cache-Control', 'public, max-age=86400'); 这样设置后对html.tpl.php中的设置也可以去掉了,因为settings.php中的设置涵盖了html和json页面的输出
- MediaWiki网站修改/includes/api/ApiMain.php中的$privateCache = 'private, must-revalidate, max-age=' . $maxage;这句,改为$privateCache = 'public, max-age=86400';,这样/api.php开头的路径就都可以缓存了
再就是自己写的一些api调用php程序,有些也需要进行响应的header("Cache-Control...")设置,才能让缓存生效。
评论