2009-07-16 9 views
4

Je viens de commencer à utiliser OutputCache sur certaines de mes actions de contrôleur et je ne reçois pas tout à fait la réponse à laquelle je m'attendais.ASP.NET MVC: En-têtes OutputCache et http

J'ai défini le temps de mise en cache à 5 minutes et l'en-tête Expires revient au même que l'en-tête Last-Modified qui est l'heure à laquelle la demande a été faite.

C'est l'en-tête que je reçois actuellement:

Date     Thu, 16 Jul 2009 06:35:07 GMT 
Server     Microsoft-IIS/6.0 
X-Powered-By   ASP.NET 
X-AspNet-Version  2.0.50727 
X-AspNetMvc-Version  1.0 
Content-Encoding  gzip 
Cache-Control   public, max-age=300 
Expires     Thu, 16 Jul 2009 06:35:06 GMT 
Last-Modified   Thu, 16 Jul 2009 06:35:03 GMT 
Vary     * 
Content-Type   text/html; charset=utf-8 
Content-Length   575 

Ceci est l'en-tête j'attendre:

Date     Thu, 16 Jul 2009 06:35:07 GMT 
Server     Microsoft-IIS/6.0 
X-Powered-By   ASP.NET 
X-AspNet-Version  2.0.50727 
X-AspNetMvc-Version  1.0 
Content-Encoding  gzip 
Cache-Control   public, max-age=300 
Expires     Thu, 16 Jul 2009 06:40:06 GMT 
Last-Modified   Thu, 16 Jul 2009 06:35:03 GMT 
Vary     * 
Content-Type   text/html; charset=utf-8 
Content-Length   575 

Toutes les idées sur lesquelles il serait en train de faire cela?

Vive Anthony

Répondre

5

max-age a la priorité (de RFC 2616):

Nous utilisons le terme expires_value pour désigner la valeur de l'en-tête Expires . Nous utilisons le terme max_age_value pour désigner une valeur appropriée du nombre de secondes portées par le « max-age » directive de l'en-tête Cache-Control dans une réponse (voir section 14.9.3).

La directive max-age est prioritaire sur ECHOUE si max-age est présent dans une réponse, le calcul est simplement:

freshness_lifetime = max_age_value 

Sinon, si Expires est présent dans la réponse , le calcul est :

freshness_lifetime = expires_value - date_value 

Ainsi, le client doit utiliser le cache version que vous attendez.

+0

Humm s'applique-t-il uniquement à HTTP/1.1? Parce que j'utilise un proxy qui apparemment ne supporte que HTTP/1.0. Cela s'applique-t-il encore? –

+0

Ce que le proxy prend en charge ne fait que différer de ce que le proxy fait avec le contenu. Les en-têtes envoyés dépendent de l'emplacement du cache spécifié dans votre attribut de cache de sortie. – bzlm

+1

L'en-tête Cache-Control a été introduit dans HTTP/1.1 pour gérer les limitations dans l'en-tête Expires. Le problème est que l'en-tête Expires définit une date d'expiration fixe qui peut entraîner des problèmes si les horloges client et serveur ne sont pas synchronisées. Lors de l'utilisation d'un navigateur prenant en charge HTTP/1.1 (à peu près tous les navigateurs), l'en-tête Expires est ignoré en faveur de l'en-tête Cache-Control - max-age. La seule fois où l'en-tête Expires est utilisé est lorsque la demande provient d'un navigateur qui prend uniquement en charge HTTP/1.0, pas HTTP/1.1. –