Python 使用mod_wsgi和Apache2 mem_缓存缓存Django响应

Python 使用mod_wsgi和Apache2 mem_缓存缓存Django响应,python,django,caching,apache2,httpresponse,Python,Django,Caching,Apache2,Httpresponse,我遵循了下面的文章,试图设置Apache2缓存,以便在Ubuntu12.10上使用带有mod_wsgi的Django。我希望Apache为我缓存一些请求 http://www.howtoforge.com/caching-with-apaches-mod_cache-on-ubuntu-10.04 在本文中,我启用了模块并设置了以下php脚本来测试缓存。缓存工作得很好-我只在5分钟后得到一个新的时间戳 vi /var/www/cachetest.php <?php header("Ca

我遵循了下面的文章,试图设置Apache2缓存,以便在Ubuntu12.10上使用带有mod_wsgi的Django。我希望Apache为我缓存一些请求

http://www.howtoforge.com/caching-with-apaches-mod_cache-on-ubuntu-10.04
在本文中,我启用了模块并设置了以下php脚本来测试缓存。缓存工作得很好-我只在5分钟后得到一个新的时间戳

vi /var/www/cachetest.php

<?php
header("Cache-Control: must-revalidate, max-age=300");
header("Vary: Accept-Encoding");
echo time()."<br>";
?>
带有Django请求的缓存根本不起作用。我使用了Firefox的LiveHeaders来检查HTTP响应头

对于上面的示例链接和PHP脚本,标题如下所示:

http://localhost/cachetest.php

GET /cachetest.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cache-Control: max-age=0

HTTP/1.1 200 OK
Date: Sun, 10 Mar 2013 02:29:32 GMT
Server: Apache/2.2.22 (Ubuntu)
X-Powered-By: PHP/5.4.6-1ubuntu1.1
Cache-Control: must-revalidate, max-age=300
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 34
Connection: close
Content-Type: text/html
----------------------------------------------------------
对于我的Django请求,缓存不起作用,它总是强制冗长的操作来完成响应,就像用F5重新加载上面的php请求一样。使用FireFox插件,我似乎正在编写正确的标题:

http://localhost/testdjango/testdjango/

GET /testdjango/testdjango/ HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive

HTTP/1.1 200 OK
Date: Sun, 10 Mar 2013 02:32:41 GMT
Server: Apache/2.2.22 (Ubuntu)
Vary: Accept-Encoding
Cache-Control: must-revalidate, max-age=20
Content-Encoding: gzip
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8
----------------------------------------------------------

我做错了什么?如何让django缓存像php脚本一样工作?谢谢

这似乎是你的问题:

Transfer-Encoding: chunked
就mod_mem_缓存而言,它意味着“流式响应”。而且,根据文件:

默认情况下,流式响应不会被缓存,除非它具有 内容长度标题


您可以通过设置来解决这个问题。

感谢您的响应-我已经尝试在Django中设置适当的标题,但是它们不知怎么被覆盖了。请在此处查看我的后续问题:。你还有其他的想法吗?谢谢-MCacheMaxStreamingBuffer没有解决您的问题吗?根据Apache文档,即使传输编码是
分块的
,并且您的响应没有内容长度集(这可能是由
mod_wsgi
剥离的,尽管这只是猜测)。不,它没有-您可以在第二篇文章中看到我的配置文件。还有一些事情正在发生。恐怕我不能再帮你了,我自己没有使用mod_wsgi,所以我没有运行它来测试我是否重现了你的问题。我希望有人能回答你的第二个帖子:)
Transfer-Encoding: chunked