この記事では主にPHPファイルで生成した画像がCDNでキャッシュできない問題の解決策を紹介します。ここでの by PHP は、ソース アドレスが PHP ファイルであることを意味します。CDN を使用しない場合、サーバーへの負荷が非常に大きくなります。CDN を必要とする友人は、この記事を参照してください。
オンライン画像ドメイン名の場合、キャッシュが削除されない場合、PHP によって画像が処理された後に、PHP が使用されて問題が発生しました。が出力されるので、エクスポートする必要があります。バックエンドから読み込むと、バックエンドサーバーへの負荷が瞬時に増加します。分析の結果、PHP には 304 処理が存在しないことがわかります。HTTP の原理は次のとおりです。サーバーへの各リクエストの後、サーバーは変更があるかどうかを検出し、変更がない場合は、クライアントのキャッシュを使用することができます。 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 未変更");
退出;
}
}
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 値が正しいかどうかを確認することができます。
追記:
長い間パッケージを取得したところ、サーバーから返された Etag タグのみが表示され、クライアントの http ヘッダーに If-None-Match が表示されなかったので、次のコードを fastcgi.conf に追加しました。 .デフォルト:
コードをコピーします。コードは次のとおりです:
fastcgi_param CACHE_ETAG $http_if_none_match;
$_SERVER を出力するとき、CACHE_ETAG 変数はまったくありません。nginx は、関連する HTTP ヘッダーを $_SERVER 変数に入れるようで、http プロトコルの理解も深まります
。
http://www.bkjia.com/PHPjc/1020284.html