Rumah > pembangunan bahagian belakang > tutorial php > 解决PHP后端生成的图片无法使用CDN缓存的方法

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

WBOY
Lepaskan: 2016-06-23 13:32:19
asal
1033 orang telah melayarinya

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


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

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

参考来源: 
http://www.lai18.com/content/433445.html


相关代码如下:

//检测有没改变//edit http://www.lai18.com 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;
Salin selepas log masuk


其中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;
Salin selepas log masuk


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

 

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan