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


Posted in PHP onJune 20, 2015

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

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

相关代码如下:

//检测有没改变

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;

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

PS:

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

fastcgi_param  CACHE_ETAG    $http_if_none_match;

一打印$_SERVER,根本就没有CACHE_ETAG这个变量,看来nginx都会将相关的HTTP头放到$_SERVER变量中,也加深了http协议的了解
PHP 相关文章推荐
提问的智慧
Oct 09 PHP
php 空格,换行,跳格使用说明
Dec 18 PHP
探讨方法的重写(覆载)详解
Jun 08 PHP
php防止SQL注入详解及防范
Nov 12 PHP
php使用Jpgraph绘制柱形图的方法
Jun 10 PHP
php 在线导入mysql大数据程序
Jun 11 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
Jul 15 PHP
Yii2中Restful API原理实例分析
Jul 25 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
Sep 11 PHP
laravel 5.1下php artisan migrate的使用注意事项总结
Jun 07 PHP
PHP 传输会话curl函数的实例详解
Sep 12 PHP
PHP清除缓存的几种方法总结
Sep 12 PHP
php简单统计字符串单词数量的方法
Jun 19 #PHP
PHP对文件夹递归执行chmod命令的方法
Jun 19 #PHP
php强制用户转向www域名的方法
Jun 19 #PHP
php自动更新版权信息显示的方法
Jun 19 #PHP
php中Snoopy类用法实例
Jun 19 #PHP
php计算整个目录大小的方法
Jun 19 #PHP
php简单计算页面加载时间的方法
Jun 19 #PHP
You might like
discuz7 phpMysql操作类
2009/06/21 PHP
php中$美元符号与Zen Coding冲突问题解决方法分享
2014/05/28 PHP
PHP获取一年有几周以及每周开始日期和结束日期
2015/08/06 PHP
PHP程序员不应该忽略的3点
2015/10/09 PHP
php中Redis的应用--消息传递
2017/03/28 PHP
jquery插件制作简单示例说明
2012/02/03 Javascript
jquery制作漂亮的弹出层提示消息特效
2014/12/23 Javascript
javascript判断图片是否加载完成的方法推荐
2016/05/13 Javascript
jQuery获取同级元素的简单代码
2016/07/09 Javascript
JS生成和下载二维码的代码
2016/12/07 Javascript
jQuery实现遮罩层登录对话框
2016/12/29 Javascript
bootstrap table表格使用方法详解
2017/04/26 Javascript
vue.js通过路由实现经典的三栏布局实例代码
2018/07/08 Javascript
vue cli3适配所有端方案的实现
2020/04/13 Javascript
[01:55]TI9显影之尘系列 - Evil Geniuses
2019/08/22 DOTA
[55:35]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第二场 1月22日
2021/03/11 DOTA
python计算最大优先级队列实例
2013/12/18 Python
Python自动调用IE打开某个网站的方法
2015/06/03 Python
Python操作MySQL数据库的三种方法总结
2018/01/30 Python
Python实现App自动签到领取积分功能
2018/09/29 Python
Windows系统下PhantomJS的安装和基本用法
2018/10/21 Python
利用python计算windows全盘文件md5值的脚本
2019/07/27 Python
如何在Django配置文件里配置session链接
2019/08/06 Python
python编写猜数字小游戏
2019/10/06 Python
python通过cython加密代码
2020/12/11 Python
Elizabeth Gage官网:英国最好的珠宝设计之一
2020/09/26 全球购物
const char*, char const*, char*const的区别是什么
2014/07/09 面试题
小学毕业家长寄语
2014/01/19 职场文书
领导接待方案
2014/03/13 职场文书
正风肃纪剖析材料范文
2014/10/10 职场文书
公司清洁工岗位职责
2015/04/15 职场文书
2015年乡镇民政工作总结
2015/05/13 职场文书
律政俏佳人观后感
2015/06/09 职场文书
新郎新娘致辞
2015/07/31 职场文书
婚礼长辈答谢词
2015/09/29 职场文书
创业计划之特色精品店
2019/08/12 职场文书