2016-12-20 2 views
0

Il semble que les directives de cache ne sont pas appliquées lorsque la réponse de la ressource contient l'en-tête HTTP Content-Disposition:inline. Lorsque nous utilisons OmniFaces CacheControlFilter, la réponse ne contient pas la directive Cache-Control ou Expires. Est-ce normal?OmniFaces CacheControlFilter n'a aucun effet lorsque la réponse contient l'en-tête Content-Disposition

+0

Plus souvent que d'autres, les en-têtes de réponse sont réinitialisés par du code destiné à diffuser un téléchargement de fichier. Êtes-vous sûr que ce n'est pas le cas ici? – BalusC

+0

Correct. il y a un response.reset(); dans le code – jpl

Répondre

2

Non, ce n'est pas le comportement par défaut.

Ce comportement suggère que le code responsable du streaming du fichier a effectué un response.reset() afin de s'assurer que la réponse est claire et nette. Vous voyez cela souvent dans les extraits de code de copypaste parce que les starters se plaignent que le téléchargement ne fonctionne pas. Par exemple ici: How to provide a file download from a JSF backing bean?

Étant donné que vous utilisez OmniFaces, vous pouvez probablement trouver Faces#sendFile() ou FileServlet plus utile pour la tâche de diffusion d'un fichier à la réponse. Les Faces#sendFile()does not exécutent un response.reset() et les caches FileServlet par défaut 30 days qui est contrôlable en remplaçant la méthode getExpireTime().

+0

Merci, il sera très utile – jpl