如何将Cache-Control标头添加到Heroku上托管的静态文件中?

时间:2015-01-09 10:04:04

标签: django heroku

我想启用图片,css和java脚本文件的浏览器缓存。

https://devcenter.heroku.com/articles/increasing-application-performance-with-http-cache-headers

heroku文章在结论中说明了这一点:

"一旦理解了HTTP缓存背后的概念,下一步就是在您的应用程序中实现它们。大多数现代Web框架都是一项微不足道的任务。"

有人可以告诉我如何完成这项琐碎的任务吗?我有一个django-python app。

2 个答案:

答案 0 :(得分:2)

像image,css和javascript这样的静态文件应该直接由网络服务器(例如Apache的nginx)提供,而不是由Django提供。因此,您应该在Web服务器配置中配置任何缓存,而不是Django。

如果您在Heroku上托管Django项目,他们似乎会根据whitenoise推荐this article

答案 1 :(得分:2)

您的静态资源应该来自网络服务器,例如nginx或apache,而不是直接来自django但是为了回答您的问题,django会提供一个staticfiles应用程序,假设您正在使用它来管理这些资源,如果所以,使用

STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.CachedStaticFilesStorage'

在您的settings.py文件中

启用django的静态文件缓存。

c.f https://docs.djangoproject.com/en/1.6/ref/contrib/staticfiles/#cachedstaticfilesstorage https://docs.djangoproject.com/en/1.7/ref/contrib/staticfiles/#cachedstaticfilesstorage

[1.6链接有更多解释如何工作]

对于django中的整体缓存,我建议阅读https://docs.djangoproject.com/en/1.7/topics/cache/ 你可以在哪里看到如何使用中间件进行网站级缓存,或者cache_control装饰器用于视图缓存,如下所示:

来自django.views.decorators.cache import cache_control

@cache_control(must_revalidate=True, max_age=3600) def my_view(request): # ...