mod_wsgi を使用して Ubuntu 12.10 の Django で使用するために、Apache2 キャッシングをセットアップするために、次の記事に従いました。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 応答では、適切なヘッダーを同じ方法で設定した後、HttpResponse オブジェクトを返します。
# Create a Response Object with the content to return and set it's
response = HttpResponse("%s"%(output_display))
response['Cache-Control'] = 'must-revalidate, max-age=20'
response['Vary'] = 'Accept-Encoding'
return response
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リクエストでは、キャッシングが機能せず、上記のphpリクエストをF5で再ロードするのと同じように、応答を完了するために常に長い操作が強制されます。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 スクリプトのように動作させるにはどうすればよいですか? ありがとう!