加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP文件生成的图片无法使用CDN缓存的解决方法

发布时间:2020-12-13 02:41:43 所属栏目:PHP教程 来源:网络整理
导读:《PHP实例:PHP文件生成的图片无法使用CDN缓存的解决方法》要点: 本文介绍了PHP实例:PHP文件生成的图片无法使用CDN缓存的解决方法,希望对您有用。如果有疑问,可以联系我们。 本日发现线上有个问题,线上一个图片域名,在前端已经加了CDN缓存,不落缓存,则用

《PHP实例:PHP文件生成的图片无法使用CDN缓存的解决方法》要点:
本文介绍了PHP实例:PHP文件生成的图片无法使用CDN缓存的解决方法,希望对您有用。如果有疑问,可以联系我们。

本日发现线上有个问题,线上一个图片域名,在前端已经加了CDN缓存,不落缓存,则用PHP动态实现图片缩放,但经PHP处理过的图片输出后,每次都要从后端读取,后端服务器压力瞬间增加,经分析,PHP中没有作304的处理,PHP编程

HTTP的原理是这样的,每次哀求到服务器后,服务端检测有没有修改,如没有修改,可以直接返回一个304的状态码,这样就用客户端的缓存了,CDN的原理就是如此,如果设置了304,就会将相应的URL进行缓存起来;PHP编程

相关代码如下:
PHP编程

代码如下:

//检测有没改变
if (isset($_SERVER['HTTP_IF_NONE_MATCH'])){
??? $etag = $_SERVER['HTTP_IF_NONE_MATCH'];
??? if (md5($this->image) === $etag){
??????? header("HTTP/1.1 304 Not Modified");
??????? exit;
??? }
}

header("Last-Modified: " . gmdate("D,d M Y H:i:s",strtotime('2011-1-1'))." GMT");
//输出etag头
header('etag:' . md5($this->image));
header('Cache-Control:max-age=2592000');echo $this->image;
PHP编程

其中http头HTTP_IF_NONE_MATCH,一般是服务器返回的对某一URL的标识,一般用MD5计算,这样我们检测MD5值对纰谬,相同就可以返回304了;PHP编程

PS:PHP编程

刚开始抓了半天包,只看到服务端返回的Etag标签,没看到客户端的http头中If-None-Match,害得在fastcgi.conf.default 中参加如下代码:
PHP编程

代码如下:

fastcgi_param? CACHE_ETAG??? $http_if_none_match;

一打印$_SERVER,根本就没有CACHE_ETAG这个变量,看来nginx都邑将相关的HTTP头放到$_SERVER变量中,也加深了http协议的了解

《PHP实例:PHP文件生成的图片无法使用CDN缓存的解决方法》是否对您有启发,欢迎查看更多与《PHP实例:PHP文件生成的图片无法使用CDN缓存的解决方法》相关教程,学精学透。编程之家 52php.cn为您提供精彩教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读