ホームページ > バックエンド開発 > PHPチュートリアル > PHPバックエンドで生成された画像がCDNでキャッシュできない問題の解決方法

PHPバックエンドで生成された画像がCDNでキャッシュできない問題の解決方法

WBOY
リリース: 2016-06-23 13:32:19
オリジナル
1033 人が閲覧しました

PHP バックエンドで生成された画像が CDN でキャッシュできない問題を解決する方法


今日、オンライン画像ドメイン名の場合、CDN キャッシュがフロントエンドに追加されているという問題を発見しました。キャッシュされていないため、PHP を使用して画像のスケーリングを動的に実装できますが、PHP で処理された画像が出力された後、毎回バックエンドから読み込む必要があり、分析後のバックエンド サーバーへの負荷が瞬時に増加します。

HTTP の原理は次のとおりです。サーバーへの各リクエストの後、サーバーは変更があるかどうかを検出し、変更がない場合は、クライアントのステータス コードを直接返します。キャッシュが使用されます。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;
ログイン後にコピー

このうち、HTTP ヘッダー HTTP_IF_NONE_MATCH は通常、サーバーによって返されます。このようにして、MD5 値が正しいかどうかを確認できます。同じ場合は、304 を返すことができます。

PS:

長い間パッケージを取得したところ、サーバーから返された Etag タグのみが表示され、If-None-Match が表示されませんでした。クライアントの http ヘッダーなので、次のコードを fastcgi.conf.default に追加しました。

fastcgi_param  CACHE_ETAG    $http_if_none_match;
ログイン後にコピー


$_SERVER が出力されるとすぐに、CACHE_ETAG 変数はまったく存在しませんでした。nginx はすべてそれを使用するようです。 $_SERVER 変数にヘッダーを追加すると、http プロトコルへの理解も深まります






ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート