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
第十二节--类的自动加载
Nov 16 PHP
PHP simple_html_dom.php+正则 采集文章代码
Dec 24 PHP
介绍一些PHP判断变量的函数
Apr 24 PHP
解析mysql left( right ) join使用on与where筛选的差异
Jun 18 PHP
ThinkPHP登录功能的实现方法
Aug 20 PHP
PDO防注入原理分析以及注意事项
Feb 25 PHP
了解PHP的返回引用和局部静态变量
Jun 04 PHP
PHP开发Apache服务器配置
Jul 15 PHP
PHP CodeIgniter分页实例及多条件查询解决方案(推荐)
May 20 PHP
基于PHP的加载类操作以及其他两种魔术方法的应用实例
Aug 28 PHP
PHP中多字节字符串操作实例详解
Aug 23 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
php结合表单实现一些简单功能的例子
2011/06/04 PHP
解析php DOMElement 操作xml 文档的实现代码
2013/05/10 PHP
基于PHP一些十分严重的缺陷详解
2013/06/03 PHP
PHP生成等比缩略图类和自定义函数分享
2014/06/25 PHP
PHP分享图片的生成方法
2018/04/25 PHP
如何取得中文输入的真实长度?
2006/06/24 Javascript
真正的JQuery.ajax传递中文参数的解决方法
2011/05/28 Javascript
JavaScript中获取鼠标位置相关属性总结
2014/10/11 Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
2014/11/06 Javascript
javascript 实现 原路返回
2015/01/21 Javascript
jquery基本选择器匹配多个元素的实现方法
2016/09/05 Javascript
js 输入框 正则表达式(菜鸟必看教程)
2017/02/19 Javascript
微信小程序访问node.js接口服务器搭建教程
2017/04/25 Javascript
javascript按钮禁用和启用的效果实例代码
2017/10/29 Javascript
JSON是什么?有哪些优点?JSON和XML的区别?
2019/04/29 Javascript
Vue.js使用axios动态获取response里的data数据操作
2020/09/08 Javascript
实例讲解Python设计模式编程之工厂方法模式的使用
2016/03/02 Python
Pycharm学习教程(5) Python快捷键相关设置
2017/05/03 Python
Python多线程原理与用法实例剖析
2019/01/22 Python
Python imread、newaxis用法详解
2019/11/04 Python
python ffmpeg任意提取视频帧的方法
2020/02/21 Python
python 连续不等式语法糖实例
2020/04/15 Python
Python ini文件常用操作方法解析
2020/04/26 Python
python通过函数名调用函数的几种场景
2020/09/23 Python
分享30个新鲜的CSS3打造的精美绚丽效果(附演示下载)
2012/12/28 HTML / CSS
html5是什么_动力节点Java学院整理
2017/07/07 HTML / CSS
马来西亚网上花店:FlowerAdvisor马来西亚
2020/01/03 全球购物
PHP如何设置和取得Cookie值
2015/06/30 面试题
Jdbc数据访问技术面试题
2012/03/30 面试题
餐饮总经理岗位职责
2014/03/07 职场文书
三分钟自我介绍演讲稿
2014/08/21 职场文书
旷课检讨书500字
2014/10/14 职场文书
幼儿园小班见习报告
2014/10/31 职场文书
运动会通讯稿100字
2015/07/20 职场文书
拔河比赛队名及霸气口号
2015/12/24 职场文书
nginx.conf配置文件结构小结
2022/04/08 Servers