WordPress 缓存插件 WP Super Cache 非常好用,结合使用 CDN,对于缓存和加速来说,会得到事半功倍的效果。
但是 WP Super Cache 代码中会有以下默认设置,前台操作没法修改:
- Vary: Accept-Encoding, Cookie
- Cache-Control: max-age=3, must-revalidate
这两项设置让人很不爽啊,而且对于有些博客主题来说,并不利于优化:
- Vary 中的 Cookie:请求头中的 Cookies 可能被服务端用做输出差异化内容的依据。用户的每次请求,CDN 可能会根据 cookies 对于用户间差异回源访问,导致 CDN 服务器不断回源,到源站抓取文件和信息。
- max-age=3 设置得太短了!客户浏览器缓存时间太短,也可能会导致CDN服务器不断回源抓取源文件。
但为什么作者仍要写Cookie,而不是删除掉这项呢?因为 可以用cookie来识别已登录用户。如果删除"cookie" 一项,可能会导致服务器缓存一些隐私页面,分发给匿名用户,导致隐私泄露。
而对于插件中默认的 Cache-Control: max-age=3, must-revalidate
设置,也不仅只有时间太短的问题。如果你在服务器头部设置了 Cache-Control
,用户浏览器http头部会有两个 Cache-Control
出现,有点乱。
解决这些问题,可以从文件源代码中进行修改,但这样做太麻烦了。不过,作者考虑到了这个问题,最新版的 WP Super Cache 文件中增加了类似于下面的代码,可以先判断有没有自定义头部 Cache-Control 和 Vary,如果有就使用自定义的值,如果没有或是空字符串,就使用插件默认值。
本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利
- if ( defined( 'WPSC_VARY_HEADER' ) ) {
- if ( WPSC_VARY_HEADER != '' ) {
- header( "Vary: " . WPSC_VARY_HEADER );
- }
- } else {
- header( "Vary: Accept-Encoding, Cookie" );
- }
- if ( defined( 'WPSC_CACHE_CONTROL_HEADER' ) ) {
- if ( WPSC_CACHE_CONTROL_HEADER != '' ) {
- header( "Cache-Control: " . WPSC_CACHE_CONTROL_HEADER );
- }
- } else {
- header( "Cache-Control: max-age=3, must-revalidate" );
- }
其中,WPSC_VARY_HEADER 和 WPSC_CACHE_CONTROL_HEADER 是需要设置的内容。
如何设置?在 wp-config.php
中进行定义,类似于:
本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利
- define( 'WPSC_VARY_HEADER', 'Accept-Encoding, Cookie' );
- define( 'WPSC_CACHE_CONTROL_HEADER', 'max-age=3, must-revalidate' );