Django:缓存控制:最大年龄。如何指定?缓存了什么?

Django:缓存控制:最大年龄。如何指定?缓存了什么?,django,caching,http-headers,Django,Caching,Http Headers,我正在制作一个网页,理想情况下,我希望用户的浏览器永远缓存所有javascript、css和图像(或允许的最大1年)。这些项目要么已版本化,要么未更改。但是,我不希望缓存html 我对缓存控制感到困惑:最大年龄。我是否为每种类型的资源(css、js等)设置了此选项?还是一次了结一切?还是针对特定文件?它会缓存html吗 我用的是Django。我甚至可以在哪里指定它: return render_to_response(my_template, {},context_instance=Reques

我正在制作一个网页,理想情况下,我希望用户的浏览器永远缓存所有javascript、css和图像(或允许的最大1年)。这些项目要么已版本化,要么未更改。但是,我不希望缓存html

我对缓存控制感到困惑:最大年龄。我是否为每种类型的资源(css、js等)设置了此选项?还是一次了结一切?还是针对特定文件?它会缓存html吗

我用的是Django。我甚至可以在哪里指定它:

return render_to_response(my_template, {},context_instance=RequestContext(request))

我注意到我的浏览器(我试过好几次)缓存图像和js,尽管我没有指定任何内容。但我能一直依靠这个吗?它将被缓存多长时间?

您需要在单个静态文件上设置此标头。但是,您不应该在生产环境中提供来自Django的静态文件。使用网络服务器,如Nginx、Lighttpd,或者更好的是使用CDN。

它还包括用户上传的图像。我想这些被缓存,他们将从django服务。还有,我在哪里设置单个文件的头呢。在html中?在我的代码中?你也不应该提供Django上传的图片。所以答案仍然是一样的:在web服务器配置中设置这个(或者使用CDN,在这种情况下,它很可能是自动的),但为了清楚起见,如果您从Django提供文件(不要这样做!),则头将在提供文件的视图中设置。如果您使用的是内置的查看功能,您将无法控制它。为了能够设置头,您需要显式地编写自己的视图来服务静态文件,并在其中设置头。然而,这将是非常低效的。CDN是否支持基于用户的访问(使用django的会话框架)?我希望向用户提供文件,但不希望让所有用户都能阅读整个文件夹(这里对Apache和django集成的了解有限)。你是说它效率低下,比如文件服务速度慢,还是编程浪费时间?django视图的开销是多少?python代码不是在第一次运行时编译为.pyc吗?谢谢。@FizxMike各种CDN支持各种身份验证机制,尽管我认为它们中的任何一种都不能与Django的现成的auth包一起使用-您必须编写一些粘合代码。@FizxMike的低效是指延迟、吞吐量和内存使用。使用CDN提供的好处是否值得付出努力,实际上取决于您的用例。如果你只需要像阿凡达这样的服务,你可以用Django。但如果你有很多文件或大文件(如视频)需要认证,你最好深入调查。