2010-08-11 4 views
5

J'ai un problème lorsque les serveurs proxy d'entreprise servent la page pour différents utilisateurs connectés. Je pense que je peux résoudre ce problème en désactivant la mise en cache du proxy. This page suggère d'inclure l'extrait suivant dans htaccess:Comment désactiver la mise en cache proxy avec .htaccess

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

Comme je l'ai bien compris (par googler), l'en-tête Expires est seulement lu par procuration, donc je pourrais aussi utiliser « set-tête Expire 0 »?

Je suppose que cela empêcherait également la mise en cache de feuilles de style, d'images et d'autres éléments (mais uniquement par des proxies, pas des navigateurs)?

Quelle est la meilleure façon de faire face à cela? J'utilise PHP, et je peux facilement modifier les en-têtes via PHP, si cela est recommandé.

Je n'ai pas accès à un serveur proxy pour les tests.

+0

@ Sumurai8 n'est pas une dupe, car il s'agit spécifiquement de la mise en cache proxy pas bro wser mise en cache. – Petah

+0

Je suppose que je n'ai pas bien lu alors. Je ne pense pas qu'il soit possible de le faire de manière fiable, mais nous verrons. – Sumurai8

Répondre

0

Utilisation:

ExpiresActive Sur

ExpiresDefault maintenant

tête Set Cache-Control « no-cache, pas de magasin, doit-revalidate, max-age = 0, proxy- revalider, no-transform »

tête Set Pragma "no-cache"

+0

Et cela permettra aux navigateurs de mettre en cache et les proxies non? – Petah

1

http 1.1 spec (RFC 2616) chapitre 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 

tête Set Cache-Control "privée, ..." le tour est joué.

L'en-tête Expires n'est pas nécessaire. Cache-Control: max-age remplace le champ Expires . Voir la section RFC: 14.21

Vous devez envoyer différents en-têtes de mise en cache en fonction du contenu que vous fournissez.

L'exemple suivant concerne un site Web fournissant des contenus statiques dans/static et modifiant le contenu pour les utilisateurs connectés. Les utilisateurs connectés sont identifiés par la présence du cookie de session: MYSESSID.

  • Permettre la mise en cache du public 5 minutes par défaut
  • Autoriser 365 jours la mise en cache du public sur les fichiers statiques
  • Autoriser la mise en cache privée 5 minutes pour les utilisateurs connectés
  • Deny la mise en cache à/dynamique/*

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

Pouvez-vous raccourcir les règles? – Petah

+0

La réponse courte est: 'Header set Cache-Control" privé, max-age = N "'. Il délivre tous les contenus pouvant être mis en cache dans les navigateurs seulement pour 'N' secondes. – jgb

Questions connexes