2012-04-04 4 views
0

Ich habe eine kleine dynamische Site in mod_python implementiert. Ich habe das geerbt, und während ich relativ geringfügige Änderungen an Inhalt und Logik vorgenommen habe, bin ich mit HTTP-Caching überfordert. Die Website funktioniert bereits gut, so dass diese ist nicht "die übliche Frage", wie deaktivieren Caching für eine dynamische Website.Wie erhalte ich die mod_python-Site, damit Clients ausgewählte Bildinhalte zwischenspeichern können?

Mein Problem ist, gibt es ein großes Banner Bild auf jeder Seite (das gleiche Bild von der gleichen URL auf jeder Seite), die für ~ 90% der Website Bandbreite aber die soweit ich sagen kann nicht zwischengespeichert wird; Wenn ich auf der Seite stöbere, wenn ich auf eine neue Seite (oder zurück zu einer zuvor besuchten) klicke, wird sie erneut heruntergeladen.

Wenn ich die Bild-URL Banner wget (um zu sehen, die Header) Ich sehe:

$ wget -S http://example.com/site/gif?name=banner.gif 
--2012-04-04 23:02:38-- http://example.com/site/gif?name=banner.gif 
Resolving example.com... 127.0.0.1 
Connecting to example.com|127.0.0.1|:80... connected. 
HTTP request sent, awaiting response... 
    HTTP/1.1 200 OK 
    Date: Wed, 04 Apr 2012 22:02:38 GMT 
    Server: Apache/2.2.14 (Ubuntu) 
    Content-Location: gif.py 
    Vary: negotiate 
    TCN: choice 
    Set-Cookie: <blah blah blah> 
    Connection: close 
    Content-Type: image/gif 
Length: unspecified [image/gif] 
Saving to: `gif?name=banner.gif' 

und den Code, der es serviert wird, nicht viel mehr als

req.content_type = 'image/gif' 
    req.sendfile(fullname) 

wo Vollername ist ein Dateipfad, der aus dem Namensparameter der Anfrage besteht.

Meine Frage ist: gibt es eine schnelle Lösung in Bezug auf die Einstellung eines Expires: oder Vary: -Feldes in der Anfrageantwort des Bildes, was dazu führt, dass Clients weniger daran interessiert sind, es wiederholt herunterzuladen?

Die Seite ist auf Ubuntu 10.04 gehostet und hat keine anderen Apache-Mods außer Apache als aktiviert als anders geschrieben.

Ich stelle fest, dass die meisten (nicht alle) der Header Site-Seiten selbst

Pragma: no-cache 
Cache-Control: no-cache 
Expires: -1 
Vary: Accept-Encoding 

enthalten (und die Original-Website Autor hat darüber klar gedacht als no-cache selektiv an nicht statisch angelegt wird Inhaltsseiten). Ich weiß nicht genug über das Caching, um zu wissen, ob dies irgendwie dazu führt, dass die enthaltene .gif-IMG jedes Mal neu geladen wird.

Antwort

1

Ich weiß nicht, ob meine Antwort Ihnen helfen kann oder nicht, aber ich poste es trotzdem. Anstatt Image-Dateien innerhalb der Python-Anwendung zu liefern, können Sie einen anderen virtuellen Host innerhalb von Apache (auf demselben Server) erstellen, nur um statische und Image-Dateien zu liefern. In Ihrer Python-Anwendung können Sie einbetten dieses Bild

<img src="http://img.yoursite.com/banner.gif" alt="banner" /> 

Mit separatem Virtual mag, können Sie verschiedene Header auf verschiedenen Inhaltstyp mit Modus-Header oder fügen Sie eine weitere Caching-Ebene für Ihre statische Datei hinzuzufügen.

Hoffe diese Hilfe.

+0

Danke, dies brachte mich auf den richtigen Weg: Ich habe fast dasselbe gemacht und einfach die Bannerbilddatei auf einen anderen Pfad auf der gleichen Domain verschoben, die dynamischen Sachen komplett vermieden und die Vorlage der einen Seite aktualisiert Hinweis darauf. Und die Seite fühlt sich sofort viel schneller an, jetzt wartet sie nicht darauf, dass das Banner auf jeder einzelnen Seite heruntergeladen wird! – timday

Verwandte Themen