我的网站使用Django,Gunicorn和Ngnix。我试图让访问我网站的客户端浏览器始终获得最新的静态文件,而不必按Ctrl + F5清除浏览器缓存以获取新的静态文件。
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires -1;
}
唯一发生过的事情是要么根本不加载静态文件,要么加载了静态文件,但是浏览器仍在对其进行缓存,需要通过ctrl + F5手动清除它们。
如何让浏览器每次获取新的静态文件?
答案 0 :(得分:2)
尝试以下nginx配置,以指示浏览器不要缓存静态文件。
location / {
add_header Cache-Control "no-store, no-cache, private";
}
无商店
no-store指令的目的是防止无意中 释放或保留敏感信息(例如,备份时) 磁带)。 no-store指令适用于整个消息,MAY 在响应或请求中发送。如果在请求中发送, 缓存不得存储此请求或任何响应的任何部分 对此。如果在响应中发送,则缓存不得存储以下内容的任何部分: 此响应或引发它的请求。该指令 适用于非共享和共享缓存。 “不得存储”于 此上下文意味着缓存不得有意存储 信息存储在非易失性存储中,并且必须尽力而为 尝试尽快从易失性存储中删除信息 转发之后可能。即使与此指令关联 有了响应,用户可以将此类响应明确存储在外部 缓存系统(例如,带有“另存为”对话框)。历史记录缓冲区 可以将此类响应存储为正常操作的一部分。
此指令的目的是满足以下要求: 某些担心意外的用户和服务作者 通过意外访问缓存数据来释放信息 结构。虽然使用此指令可能会提高 在某些情况下,我们提醒您,它绝对不是可靠的 确保隐私的充分机制。特别是恶意或 受损的缓存可能无法识别或遵守此指令,并且 通信网络可能容易受到窃听。
但是,我建议使用ManifestStaticFilesStorage
而不是不在浏览器上缓存静态文件。这会将文件内容的md5哈希附加到文件名。因此,每次文件内容更改时,文件名都会更改,浏览器将向该文件发出新请求。这样,浏览器可以将静态文件缓存更长的时间,从而提高页面加载性能。
要启用ManifestStaticFilesStorage,必须确保满足以下要求:
django.contrib.staticfiles.storage.ManifestStaticFilesStorage
collectstatic
管理命令收集了所有静态文件即
# in settings.py
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'
DEBUG = False
运行
python manage.py collectstatic
我的参考资料: