当前位置

让CDN缓存json等API数据

James Qi 在 2022年9月19日 - 17:45 提交

在《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调用内容,只有百度云加速有这个问题。

json缓存CDN

我先尝试了在百度云加速中添加页面规则、修改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...")设置,才能让缓存生效。

 

 

自由标签:

添加新评论

Plain text

  • 不允许使用HTML标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。