2010-03-16 20 views
1

Je suis la mise en œuvre d'un serveur web personnalisé d'un genre. Et je cherche à ajouter un support d'en-tête Expires. Cependant, je ne sais pas exactement comment l'implémenter. Si plusieurs demandes de cache à froid sont effectuées sur la même ressource inchangée sur le serveur et que le serveur a renvoyé un en-tête Expires différent (disons qu'il utilise le temps relatif pour calculer la valeur exacte de la date d'expiration, par exemple +6 heures à partir de la demande time), cela invalide-t-il aussi le cache sur tous les serveurs proxy entre-deux? Ou est-ce impossible d'arriver (selon la spécification)?L'en-tête HTTP `Expires` doit-il être cohérent entre plusieurs demandes de cache froid?

L'en-tête HTTP Expires doit-il être cohérent entre plusieurs demandes de cache à froid?

Répondre

0

Ok, never mind, trouvé les informations pertinentes dans le cadre du Cache Revalidation and Reload Controls section du HTTP Spec

Fondamentalement, vous pouvez servir tous les validateurs différents que vous voulez, mais vous devez savoir que, dans ces proxies cas avoir un ensemble de différents validateurs provenant de leur propre cache et de divers agents utilisateurs communiquant avec le proxy. Ils peuvent choisir de vous en envoyer un, ce qui peut ne pas être le bon ou le meilleur pour les utilisateurs finaux. Cependant, une "meilleure approche" a été suggérée dans la spécification.

Je suppose que cela devrait couvrir Expires en-têtes ainsi que ETags, Cache-Control et autres joyeusetés.


Voici l'extrait pertinent, au cas où quelqu'un est intéressé:

Lorsqu'un cache intermédiaire est forcé, au moyen d'un max-age = 0 directive, à revalider sa propre entrée de cache, et le client a fourni son propre validateur dans la requête, le validateur fourni peut différer du validateur actuellement stocké avec l'entrée de cache . Dans ce cas, le cache PEUT utiliser l'un ou l'autre des validateurs pour effectuer sa propre demande sans affecter la transparence sémantique . Toutefois, le choix du validateur peut affecter les performances. La meilleure approche consiste à ce que le cache intermédiaire utilise son propre validateur lors de sa demande. Si le serveur répond avec 304 (pas modifié), le cache peut renvoyer sa copie maintenant validée au client avec une réponse 200 (OK). Si le serveur répond avec une nouvelle entité et validateur cache, cependant, le cache intermédiaire peut comparer le validateur retourné avec celui prévu dans la demande du client, en utilisant la fonction de comparaison forte. Si le validateur du client est égal à le serveur d'origine, le cache intermédiaire renvoie simplement 304 (non modifié). Sinon, il renvoie la nouvelle entité avec une réponse 200 (OK) . Si une demande inclut la directive no-cache, elle ne doit PAS inclure min-fresh, max-stale ou max-age.