index.htmlキャッシュによるファイル読み込みは最新の解決方法ではありません。

2545 ワード

環境:フロントエンド単一ページ(Vue)+NFinx
問題:http://xxx.com/a/アクセスはhttp://xxx.com/a/Indexの下に移動します。コードは更新アクセスがあります。http://xxx.com/a/Indexの完全なリンクindex.ロードは最新のものです。アクセスはhttp://xxx.com/a/ですか?それとも読み出したdisk cacheの内容ですか?ロードされたページは最新のものではありません。キャッシュに表示された内容をユーザが整理しないようにするのはエラーです。
解決方法:nginxでno-cache、no-storeを配置する
例:
location /a {
    add_header Cache-Control 'no-cache, no-store, must-revalidate,proxy-revalidate, max-age=0';
}
no-cache:ローカルキャッシュで、プロキシサーバでキャッシュすることができますが、このキャッシュはサーバで検証してこそ使えます。index.は変更されていません。ブラウザの状態コードは304です。index.html缓存导致加载文件不是最新的解决方法_第1张图片
no-store:ローカルとプロキシはキャッシュしません。毎回サーバーから取得します。index.htmlステータスコードは常に200です。index.html缓存导致加载文件不是最新的解决方法_第2张图片
must-revalidate:キャッシュは使用前に古いリソースの状態を検証しなければならず、かつ使用期限が切れたリソースを使用してはいけません。ページが有効期限が切れたら、サーバーに行って取得するという意味です。
proxy-revalidate:must-revalidateと同じ役割を果たしていますが、それは共有キャッシュ(例えば、プロキシ)にのみ適用され、プライベートキャッシュによって無視されます。
max-age=:キャッシュメモリの最大周期を設定し、この時間キャッシュを超えると、期限が切れると見なされます(単位秒)。Expiresとは対照的に、時間は要求に対する時間である。max-ageはExpiresを上書きします。
chrome networkで要求リソースを確認したところ、ブラウザキャッシュには3つの状況があることが分かりました。
  • memory cacheはサーバにアクセスしないで、直接キャッシュを読みます。メモリから読み取り、一般的にはキャッシュリソースが大きくない画像など、ブラウザがデータを閉じなくなります。
  • disk cacheはサーバにアクセスせずにキャッシュを読み、ディスクからキャッシュを読み取り、キルトプロセス時にデータが存在する。一般的にキャッシュリソースが大きいjs、cssなどです。
  • 304はサーバにアクセスし、データが更新されていないことを発見し、サーバはこの状態コードを返す。キャッシュからデータを読み出します。
  • 参考:https://www.zhihu.com/question/64201378 https://blog.csdn.net/zs343961443/article/details/87258217