2010-08-11 14 views
5

Ich habe ein Problem, wo Corporate Proxy-Server die Seite für verschiedene angemeldete Benutzer dient. Ich rechne damit, dass ich dieses Problem lösen kann, indem ich das Proxy-Caching deaktiviere. This page schlägt vor, einschließlich der folgenden Ausschnitt in .htaccess:Wie Proxy-Caching mit. Htaccess deaktivieren

ExpiresDefault A0 
Header set Cache-Control "no-store, no-cache, must-revalidate, max-age=0" 
Header set Pragma "no-cache" 

Wie ich es (durch googeln) verstanden haben, die Expires-Header nur durch Proxies gelesen wird, so könnte ich benutze auch nur „Header Satz Verfällt 0“?

Ich nehme an, dies würde auch das Zwischenspeichern von Stylesheets, Bildern und anderen Assets (obwohl nur durch Proxies, nicht Browser) verhindern?

Was ist der beste Weg, damit umzugehen? Ich benutze PHP und kann Header leicht auch über PHP ändern, wenn das empfohlen wird.

Ich habe keinen Zugriff auf einen Proxy-Server zum Testen.

+0

@ Sumurai8 es ist kein dupe, da dies speziell über Proxy-Caching nicht bro ist Wsser-Caching. – Petah

+0

Ich glaube, ich habe damals nicht gut gelesen. Ich glaube nicht, dass das zuverlässig möglich ist, aber wir werden sehen. – Sumurai8

Antwort

0

Verwendung:

ExpiresActive Auf

ExpiresDefault jetzt

Header gesetzt Cache-Control „no-cache, no-store, Must-revalidate, max-age = 0, Proxy- revalidate, no-Transformation“

Header gesetzt Pragma "no-cache"

+0

Und dies ermöglicht Browsern zu cachen und Proxies nicht? – Petah

1

Von http 1.1-Spezifikation (RFC 2616) Kapitel 14.9.1

private 
    Indicates that all or part of the response message is intended for 
    a single user and MUST NOT be cached by a shared cache. This 
    allows an origin server to state that the specified parts of the 

Header gesetzt Cache-Control "private, ..." funktioniert der Trick.

Die Expires-Kopfzeile ist nicht erforderlich. Cache-Control: max-age überschreibt das Feld Expires. Siehe RFC-Abschnitt: 14.21

Sie sollten unterschiedliche Caching-Header senden, abhängig vom Inhalt, den Sie bereitstellen.

Das folgende Beispiel bezieht sich auf eine Website, die statische Inhalte in/static bereitstellt und Inhalt für angemeldete Benutzer variiert. Angemeldete Benutzer werden durch das Vorhandensein des Sitzungscookies identifiziert: MYSESSID.

  • 5min öffentliche Caching standardmäßig zulassen
  • 365 Tage zulassen öffentlich-Caching auf statische Dateien
  • 5min privaten Caching zulassen für eingeloggte Benutzer
  • Deny Caching auf/dynamic/*

RewriteEngine On 
# Flag files in /static as STATIC 
RewriteRule ^static - [E=STATIC:1] 

# Flag requests by logged in users as PRIVATE 
# Users are identified by presence of MYSESSID cookie 
# Ignores files in: /static 
RewriteCond %{HTTP_COOKIE} MYSESSID 
RewriteCond %{REQUEST_URI} !^/static 
RewriteRule^- [E=PRIVATE:1] 

# Tell proxy servers that contents not in /static vary based on the given cookies 
RewriteCond %{REQUEST_URI} !^/static 
RewriteRule^- [E=VARY:1] 

# Flag requests to /dynamic as NO_CACHE 
RewriteRule ^dynamic - [E=NO_CACHE:1] 


## Default Cache-Control 
# Per default, any content is public and 5min cacheable 
Header set Cache-Control "public, max-age=300" 

## Static Files 
# Static files are public and 365d cacheable. 
Header set Cache-Control "public, max-age=31536000" env=STATIC 
# Reset age, indicates objects as fresh 
Header set Age 0 env=STATIC 

## Private responses 
# private. Allow 5min caching 
Header set Cache-Control "private, max-age=300" env=PRIVATE 

## Deny caching 
Header set Cache-Control "private, max-age=0, no-cache, no-store, must-revalidate" env=NO_CACHE 

## Vary rules 
Header append Vary: Cookie env=VARY 
+0

Können Sie die Regeln beliebig verkürzen? – Petah

+0

Die kurze Antwort lautet: 'Header-Set Cache-Control 'privat, max-age = N" '. Es liefert alle Inhalte, die in Browsern gespeichert werden können, nur für "N" Sekunden. – jgb