ホームページ >バックエンド開発 >PHPチュートリアル >PHP ファイルによって生成された画像は CDN によってキャッシュできません、_PHP チュートリアル
オンラインで画像ドメイン名について、CDN キャッシュが削除されていない場合、問題が発生しました。画像の動的ズームを実現するためにPHPを使用しますが、PHPで処理した画像を出力した後は毎回バックエンドから読み込む必要があり、解析後のバックエンドサーバーへの負荷が瞬時に高まります。 PHP、
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 未変更");
終了します;
}
}
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.default:
コードをコピーします コードは次のとおりです:
fastcgi_param CACHE_ETAG $http_if_none_match;
$_SERVER が出力されるとき、CACHE_ETAG 変数はまったくありません。nginx は関連する HTTP ヘッダーを $_SERVER 変数に入れるようです。これにより、http プロトコルの理解も深まります