Wir führen Plone 3.3.6 hinter Apache 2.2.19 mit mod_cache aus. Wir haben kürzlich festgestellt, dass Apache die 206-Antwort auf eine Bereichsanforderung zwischenspeichert und diese Teilantwort dann bereitstellt, wenn eine Anforderung für die vollständige Ressource erfolgt.
Was scheint zu passieren:
- Einige Clients stellen eine Bereichsanforderung für eine Ressource, die sich noch nicht im Cache befindet oder sich im Cache befindet, aber abgelaufen ist
- Apache bedient die 206-Antwort korrekt
- Ein anderer Client stellt einer Standardanforderung dieselbe Ressource
- Apache liefert die gleiche Antwort an diesen zweiten Client: Es sollte die gesamte Antwort mit einer 200 bedienen
Dies führt gelegentlich zu Problemen mit unserem CSS auf einigen Websites
Ich kann dies konsistent replizieren: Ich habe ein kleines Python-Skript geschrieben, um eine Bereichsanfrage zu stellen.
Ich glaube nicht, dass wir mit unserer Apache-Konfiguration etwas Außergewöhnliches tun. Wir verwenden die Reverse-Proxy-Konfiguration, um Seiten von Plone aus bereitzustellen. Die für mod_cache relevante Apache-Konfiguration lautet wie folgt:
CacheEnable disk /
CacheDisable /static
CacheDisable /sitemap.xml.gz
CacheDisable /robots.txt
CacheIgnoreHeaders Set-Cookie
UseCanonicalName On
RequestHeader edit Accept-Encoding ^.*gzip.*$ gzip early
RequestHeader edit Accept-Encoding ^(?!gzip).*$ "" early
Das Apache-Caching-Handbuch enthält keine 206 Antworten in der Liste der Statuscodes, die die Antwort "haben muss", damit sie zwischengespeichert werden kann. Ist dies ein Fehler in Apache oder machen wir etwas falsch in der Konfiguration?
Cache-Control
oder einemExpires
Header antworteten , also habe ich die fehlerhafte Logikprüfung nicht bestanden.