»

给WP Super Cache 重新定义头部的Cache-Control和Vary

    WordPress  
WP Rocket数据库建站身份认证CDNCLB爬虫前端web.config查询工作ApacheSEO防盗链Wp Super Cache重定向网站优化插件浏览器网站镜像网络安全wordpress访客腾讯云加速WordPress插件

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)。时光在路上保留所有权利

  1. if ( defined( 'WPSC_VARY_HEADER' ) ) {  
  2.     if ( WPSC_VARY_HEADER != '' ) {  
  3.         header( "Vary: " . WPSC_VARY_HEADER );  
  4.         }  
  5. else {  
  6.     header( "Vary: Accept-Encoding, Cookie" );  
  7. }  
  8. if ( defined( 'WPSC_CACHE_CONTROL_HEADER' ) ) {  
  9.     if ( WPSC_CACHE_CONTROL_HEADER != '' ) {  
  10.         header( "Cache-Control: " . WPSC_CACHE_CONTROL_HEADER );  
  11.         }  
  12. else {  
  13.     header( "Cache-Control: max-age=3, must-revalidate" );  
  14. }  

 

其中,WPSC_VARY_HEADER 和 WPSC_CACHE_CONTROL_HEADER 是需要设置的内容。

如何设置?在 wp-config.php 中进行定义,类似于:

本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利

  1. define( 'WPSC_VARY_HEADER', 'Accept-Encoding, Cookie' );  
  2. define( 'WPSC_CACHE_CONTROL_HEADER', 'max-age=3, must-revalidate' );  

 

时光在路上扫码阅读、分享
  • 版权声明:该文章由 时光在路上 发表,共 1523字。除非特别标注来源,否则为原创。详见《版权声明》部分。
  • 转载请注明:文章标题和文章链接 - 时光在路上 - 也可直接“复制本文链接” 或 使用右边二维码分享本文 →