ホームページ >運用・保守 >Nginx >nginxはページキャッシュを制御するメソッドを期限切れにします

nginxはページキャッシュを制御するメソッドを期限切れにします

王林
王林転載
2023-05-12 08:04:051703ブラウズ

構文:expires [time|epoch|max|pff] デフォルト値:offexpires ディレクティブは、http 応答の「expires」および「cache-control」ヘッダー情報を制御し、ページのキャッシュ時間を制御する機能を開始します。正しい数値または負の数値を使用できます。 「expires」ヘッダーの値は、設定された時間値に現在のシステム時間を加算することによって設定されます。時間値は「cache-control」の値も制御します。負の数値はキャッシュなしを示し、正の数値またはゼロは max-age=time epoch を示します。「expires」の値を 1january,1970,00:00 として指定します。 :01 gmtmax: "expires" を指定します。 "cache-control" の値は 31december2037 23:59:59gmt で、"cache-control" の値は 10 年です。 -1: 「expires」の値を現在のサーバー時間の -1 秒に指定します。これは、永久に期限切れになることを意味します。 off: "expires" と "cache-control" の値を変更しないでください。
expires は特定の時間を使用し、サーバーとクライアントの間で厳密な同期を必要とします。
キャッシュ コントロールは、max-age ディレクティブを使用して、コンポーネントがキャッシュされる期間を指定します。
http1.1 をサポートしていないブラウザの場合でも、有効期限を制御する必要があります。したがって、2 つの応答ヘッダーを指定するのが最善です。ただし、http 仕様では、max-age ディレクティブが Expires ヘッダーを書き換えると規定しています。

プロキシまたはブラウザでキャッシュしたくない場合は、no-cache パラメータまたはプライベート パラメータを追加します:
# 1d 期限切れ;
add_header cache-control no-cache;
add_header Cache-control private ;
この方法では、ブラウザー f5 が更新されると、戻り値は 304 ではなく 200 になります。

nginx によるキャッシュ制御の例を記録します:
キャッシュ;
add_header キャッシュ制御 private;
if ( !-e $request_filename) {
書き換え ^(.*) http://test.zhaopin.com/index.html Break;
# add_header キャッシュ- control no-cache;
# add_header cache-control private;
書き換えてからadd_headerを書いたところ、add_headerが機能しないことが分かりました。 。これは、apache の mod_expires モジュールに if..


Apache の mod_expires モジュールが書き込まれているため、expires ヘッダーを使用するときに max-age のような相対的な方法で日付を設定できるためです。これは、expiresdefault ディレクティブによって完了します。 。例: 写真などの有効期限はリクエストの開始から 10 年です。

expiresdefault "access plus 10years"

Expires ヘッダーと Cache-Control max-age ヘッダーを応答で送信します。

expires|etag はページ キャッシュを制御します。 違いは、expires: 上の記事で述べたように、expires ディレクティブは、http 応答の "expires" および "cache-control" ヘッダー情報を制御し、関数を開始します。ページのキャッシュ時間を制御します。:正または負の数値を使用できます。 「expires」ヘッダーの値は、設定された時間値に現在のシステム時間を加算することによって設定されます。時間値は「cache-control」の値も制御します。負の数値はキャッシュなしを示し、正の数値またはゼロは max-age=time epoch を示します。「expires」の値を 1january,1970,00:00 として指定します。 :01 gmtmax: "expires" を指定します。 "値は 31december203723:59:59gmt で、"cache-control" の値は 10 年です。 -1: 「expires」の値を現在のサーバー時間の -1 秒に指定します。これは、永久に期限切れになることを意味します。 off: 「expires」と「cache-control」の値を変更しないでください。

expires は特定の時間を使用し、サーバーとクライアントの間で厳密な同期を必要とします。
キャッシュ コントロールは、max-age ディレクティブを使用して、コンポーネントがキャッシュされる期間を指定します。
http1.1 をサポートしていないブラウザの場合でも、有効期限を制御する必要があります。したがって、2 つの応答ヘッダーを指定するのが最善です。ただし、http 仕様では、max-age ディレクティブが Expires ヘッダーを書き換えると規定しています。これは通常、ページがすぐに変更されない場合に使用されます。キャッシュの有効期限が切れた場合、ブラウザはキャッシュを再利用する前にまず有効かどうかを確認します。これは「条件付き取得リクエスト」です。有効な場合は 304 を返します。ステータスコード。有効期限は、最終変更された応答ヘッダーによって決定されます。図に示すように:
最初の訪問:
リクエスト:

nginx expires控制页面缓存的方法
戻り:

nginx expires控制页面缓存的方法
2 回目の訪問:
リクエスト:

nginx expires控制页面缓存的方法
Return:

nginx expires控制页面缓存的方法
現時点で返されるステータス コードは 304 で、リクエストには最初のコードよりも多くの if-modified が含まれています。 time -since ヘッダーは元のサーバーの last-modified ヘッダーと比較されるため、ブラウザーのキャッシュが実装され、有効期限が切れているかどうかが判断されます。
簡単に言うと、last-modified と if-modified-since はどちらもページの最終変更時刻を記録するために使用される http ヘッダー情報ですが、last-modified はサーバーからクライアントに送信される http ヘッダーであり、if-modified はサーバーからクライアントに送信される http ヘッダーです。 -since はクライアントからサーバーに送信されたヘッダーから、ローカルに存在するキャッシュ ページを再度リクエストすると、クライアントが if-modified- を通じて前のサーバーから送信された最終変更のタイムスタンプを送り返すことがわかります。これは、サーバーが検証を実行し、このタイムスタンプを使用してクライアントのページが最新かどうかを判断するためのものです。最新でない場合は、新しいコンテンツが返されます。最新の場合は、304 が返されます。ローカル キャッシュ内のページが最新であることをクライアントに伝えるため、クライアントはローカルからページを直接ロードできるため、ネットワーク上で送信されるデータが大幅に削減され、サーバーの負担も軽減されます。

プロキシまたはブラウザでキャッシュしたくない場合は、no-cache パラメータまたはプライベート パラメータを追加します:
# 1d 期限切れ;
add_header cache-control no-cache;
add_header cache-control private ;
nginx expires控制页面缓存的方法



etag: エンティティ タグは、Web サーバーとブラウザのキャッシュの有効性を確認するために使用されるメカニズムです。オリジンサーバーは etag 応答ヘッダーを使用してコンポーネントの etag を指定し、ブラウザーは if-none-match ヘッダーを介して etag をオリジンサーバーに返します。一致する場合は、次のように 304
を返します。
最初の訪問:
リクエスト:
nginx expires控制页面缓存的方法

戻り:
nginx expires控制页面缓存的方法

2 回目request:
nginx expires控制页面缓存的方法

Return:
nginx expires控制页面缓存的方法

返されるステータス コードは引き続き 304 で、リクエストには最初よりも多くの if があります -一致しないヘッダー。そこでブラウザのキャッシュを実装します。この値が一致しない場合、キャッシュは期限切れになります。
etags と if-none-match は、リソースが変更されたかどうかを判断するために一般的に使用される方法です。 last-modified および http-if-modified-since に似ています。ただし、違いは、last-modified と http-if-modified-since はリソースの最終変更時刻のみを決定するのに対し、etag と if-none-match はリソースの任意の属性にできることです。
etag と if-none-match の動作原理は、httpresponse に etag 情報を追加することです。クライアントがリソースを再度リクエストすると、if-none-match 情報 (etags の値) が httprequest に追加されます。サーバーがリソースの etag が変更されていない (リソースが変更されていない) ことを確認すると、304 ステータスを返します。そうでない場合、サーバーは 200 ステータスを返し、リソースと新しい etag を返します。
iis の etag 形式を変更する必要があります。

以上がnginxはページキャッシュを制御するメソッドを期限切れにしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。