PHP文件生成的圖片無法使用CDN緩存的解決方法
今天發(fā)現(xiàn)線上有個(gè)問題,線上一個(gè)圖片域名,在前端已經(jīng)加了CDN緩存,不落緩存,則用PHP動(dòng)態(tài)實(shí)現(xiàn)圖片縮放,但經(jīng)PHP處理過的圖片輸出后,每次都要從后端讀取,后端服務(wù)器壓力瞬間增加,經(jīng)分析,PHP中沒有作304的處理,
HTTP的原理是這樣的,每次請求到服務(wù)器后,服務(wù)端檢測有沒有修改,如沒有修改,可以直接返回一個(gè)304的狀態(tài)碼,這樣就用客戶端的緩存了,CDN的原理就是如此,如果設(shè)置了304,就會(huì)將相應(yīng)的URL進(jìn)行緩存起來;
相關(guān)代碼如下:
//檢測有沒改變
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,一般是服務(wù)器返回的對某一URL的標(biāo)識(shí),一般用MD5計(jì)算,這樣我們檢測MD5值對不對,相同就可以返回304了;
PS:
剛開始抓了半天包,只看到服務(wù)端返回的Etag標(biāo)簽,沒看到客戶端的http頭中If-None-Match,害得在fastcgi.conf.default 中加入如下代碼:
fastcgi_param CACHE_ETAG $http_if_none_match;
一打印$_SERVER,根本就沒有CACHE_ETAG這個(gè)變量,看來nginx都會(huì)將相關(guān)的HTTP頭放到$_SERVER變量中,也加深了http協(xié)議的了解
相關(guān)文章
php中call_user_func函數(shù)使用注意事項(xiàng)
這篇文章主要介紹了php中call_user_func函數(shù)使用注意事項(xiàng),較為詳細(xì)的講述了call_user_func函數(shù)的用法實(shí)例與注意事項(xiàng),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-11-11
php htmlspecialchars加強(qiáng)版
加強(qiáng)版htmlspecialchars2010-02-02
對象失去焦點(diǎn)時(shí)自己動(dòng)提交數(shù)據(jù)的實(shí)現(xiàn)代碼
生產(chǎn)線上,提升輸入員輸入效率,在沒有購買到Bar code槍之前,需要修改程序,即是說當(dāng)mouse光標(biāo)離開TextBox之后,數(shù)據(jù)自動(dòng)提交到數(shù)據(jù)庫中2012-11-11
提示Trying to clone an uncloneable object of class Imagic的解決
使用網(wǎng)上流傳的一個(gè)程序?qū)崿F(xiàn)pdf截圖為png,需要使用Imagic擴(kuò)展,安裝后出現(xiàn)Trying to clone an uncloneable object of class Imagic提示,下面是具體的解決方法分享。2011-10-10
PHP實(shí)現(xiàn)支持GET,POST,Multipart/form-data的HTTP請求類
這篇文章主要介紹了PHP實(shí)現(xiàn)支持GET,POST,Multipart/form-data的HTTP請求類,包括了連接與處理方式及相關(guān)的技巧,需要的朋友可以參考下2014-09-09
ThinkPHP實(shí)現(xiàn)定時(shí)任務(wù)的操作步驟
定時(shí)任務(wù)就是在特定的時(shí)間點(diǎn)執(zhí)行一些特定的任務(wù),比如,每天晚上12點(diǎn)自動(dòng)清空數(shù)據(jù)庫,或者每分鐘檢查一次服務(wù)器資源使用情況,那么,如何使用ThinkPHP來實(shí)現(xiàn)這些定時(shí)任務(wù)呢?本文小編給大家介紹了ThinkPHP實(shí)現(xiàn)定時(shí)任務(wù)的操作步驟,需要的朋友可以參考下2024-09-09

