Définition du modèle ThingWorx dans Composer > Sécurité > Personnalisation de l'en-tête Cache-Control
Personnalisation de l'en-tête Cache-Control
Les éléments décrits dans cette rubrique ne doivent être configurés que si votre entreprise a des exigences particulières en matière de mise en cache des messages ou si vous savez qu'une même réponse sera envoyée à de nombreuses reprises aux clients connectés.
Vue d'ensemble
Cache-Control améliore les performances et la réactivité lors de la gestion des ressources HTTP au moyen notamment des actions suivantes :
Autoriser chaque ressource à définir ses propres règles de mise en cache à l'aide de l'en-tête Cache-Control.
L'en-tête Cache-Control définit les personnes autorisées à mettre en cache la réponse, sous quelles conditions et pour quelle durée.
Selon le type de ressource, des règles Cache-Control spécifiques doivent être utilisées. Par exemple, les images publiques sont parfaites pour la mise en cache, ce qui n'est pas le cas des pages contenant des données sensibles des utilisateurs.
Dans l'idéal, essayez de mettre en cache autant de réponses que possible aussi longtemps que possible sur le client, tout en implémentant un mécanisme de revalidation efficace. Consultez le diagramme de la section "Définir des règles optimales pour Cache-Control" de cette page Web pour déterminer en toute simplicité les règles Cache-Control optimales pour la ressource.
Consultez cette page Web pour obtenir une liste complète des directives pour Cache-Control.
Utilisation de l'en-tête Cache-Control
Vous pouvez gérer l'en-tête Cache-Control des manières suivantes :
A partir de l'application, en ajoutant l'en-tête à l'objet réponse. Par exemple, en appelant l'API HttpServletResponse#setHeader(String name, String value) si vous utilisez les API Java et Servlet.
A partir d'un serveur Web, comme Apache (voir mod_expires).
A partir d'équilibreurs de charge, de proxy et d'autres composants similaires (par exemple, HAProxy et Nginx).
A partir de balises meta dans les pages HTTP.
Il existe typiquement deux façons de définir un en-tête :
En remplaçant la valeur si l'en-tête est déjà défini
En ajoutant une valeur aux valeurs existantes si l'en-tête est déjà défini
Personnalisation de l'en-tête Cache-Control dans ThingWorx
Modifier les options de Cache-Control peut nuire aux performances du serveur ThingWorx affecté. Si les messages sont mis en cache pendant une courte période ou s'ils ne le sont pas du tout, le traitement des messages entrants pourra nécessiter plus de temps. Si davantage de messages sont mis en cache pendant une période étendue, l'opération peut nécessiter plus de mémoire.
Pour personnaliser les paramètres de Cache-Control dans ThingWorx, le fichier web.xml sur le serveur Apache Tomcat doit être modifié :
1. Ajoutez les paramètres X-Content-Type-Options et X-XSS-Protection au fichier web.xml pour renforcer la sécurité :
<filter>
<description>Sets various HTTP Response Headers in order to increase security, etc.</description>
<filter-name>HttpResponseHeadersFilter</filter-name>
<filter-class>com.thingworx.security.filter.HttpResponseHeadersFilter</filter-class>
<init-param>
<param-name>X-Content-Type-Options</param-name>
<param-value>SET nosniff</param-value>
</init-param>
<init-param>
<param-name>X-XSS-Protection</param-name>
<param-value>SET mode=block</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>HttpResponseHeadersFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2. Ajoutez les en-têtes Cache-Control souhaités. Par exemple :
<init-param>
<param-name>Cache-Control</param-name>
<param-value>SET max-age=86400, public</param-value>
</init-param>
3. Si une configuration plus précise est nécessaire, il est possible d'ajouter plusieurs instances du filtre avec des mappages différents. Par exemple :

<filter>
<description>Public resources cache</description>
<filter-name>PublicResourcesCache</filter-name>
<filter-class>com.thingworx.security.filter.HttpResponseHeadersFilter</filter-class>
<init-param>
<param-name>Cache-Control</param-name>
<param-value>SET max-age=86400, public</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>PublicResourcesCache</filter-name>
<url-pattern>/public/*</url-pattern>
</filter-mapping>

<filter>
<description>Private resources cache</description>
<filter-name>PrivateResourcesCache</filter-name>
<filter-class>com.thingworx.security.filter.HttpResponseHeadersFilter</filter-class>
<init-param>
<param-name>Cache-Control</param-name>
<param-value>SET no-store</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>PrivateResourcesCache</filter-name>
<url-pattern>/private/*</url-pattern>
</filter-mapping>