1. 强缓存和协商缓存参数设置
- 强缓存:默认读取本地资源,不发送请求
- Pragma:no cache // 需要校验服务器文件新鲜度
- Cache-Control: max-age:xxx秒
- Expires: 过期时间设置 秒 可设置 1d 等
- 协商缓存:需要校验文件的新鲜度,有两组请求头进行设置
-
Last-Modified-If-Modified-Since
-
ETag-If-None-Match
-
2. nginx如何配置强缓存和协商缓存
使用docker进行模式
2.1 nginx通用配置
server {
listen 80;
server_name localhost;
#charset koi8-r;
access_log /var/log/nginx/host.access.log main;
error_log /var/log/nginx/error.log error;
location / {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Headers' '*';
add_header 'Access-Control-Allow-Methods' '*';
# OPTIONS 直接返回204
if ($request_method = 'OPTIONS') {
return 204;
}
root /usr/share/nginx/html;
# index index.html index.htm;
try_files $uri $uri/ /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
2.2 默认不设置开启协商缓存
第一次请求
第二次刷新 从内存读取
返回304
2.3 全部禁用
# 全部禁用
expires -1;
add_header Cache-Control "no-cache, no-store, must-revalidate, max-age=0";
2.4 开启强缓存
- 使用expires参数
- 转化成Cache-Control参数
- 强缓存 -1 不使用缓存 max 最大值 315360000
expires 4;
# 关闭 etag
# etag off;
# 关闭 Last-Modified
add_header Last-Modified "";
第一次 关注Expires字段
再次刷新
- 使用Cache-Control参数
add_header 'Cache-Control' "max-age=10";
第一次
第二次 刷新
超过时间
- 同时存在
add_header 'Cache-Control' "max-age=30";
expires 4; // 会转化,还是以这个为准
2.5 开启协商缓存
默认就是开启
2.6 开启强缓存和协商缓存
两者都设置以协商缓存为准
# 强缓存 以expires为准
add_header 'Cache-Control' "public, max-age=10";
# 协商缓存
add_header 'Cache-Control' "no-cache";
只设置max-age
如果未设置no-cache
,会以强缓存的max-age为准,过期了,去服务器请求,返回304,协商缓存。
add_header 'Cache-Control' "public, max-age=30";
未过30s,本地读取,时间未发生变化:
超过30s,服务器校验,返回304: