Composer 中的 ThingWorx 模型定义 > 安全 > 自定义缓存控制标题
自定义缓存控制标题
仅当贵公司有消息缓存需求,或当您知道要向连接的客户端多次发送相同的响应时,才会配置此处所述的项。
概述
“缓存控制”是一种机制,可在通过以下操作提供 HTTP 资源时改进性能和响应能力:
允许每个资源通过 Cache-Control 标题定义其缓存策略。
Cache-Control 标题将定义缓存响应的人员、缓存情况以及缓存时间。
根据资源的类型,应使用最佳 Cache-Control 策略。例如,公共图像是进行缓存的理想候选对象,但包含用户的敏感数据的页面不适合进行缓存。
理想情况下,在客户端上缓存尽可能多的响应,且缓存时间越长越好,并执行一个高效的重新验证机制。请参考 此网页上“定义最佳缓存控制策略”部分中的布线图,以帮助确定资源的最佳缓存控制策略。
有关缓存控制指令的完整列表,请参考 此网页
处理缓存控制标题
可通过以下方法处理缓存控制标题:
从应用程序中,将标题添加到响应对象,例如,如果要使用 Java 和 Servlet API,则调用 HttpServletResponse#setHeader(String name, String value) API。
从 Web 服务器,例如 Apache (请参阅 mod_expires)。
从负载平衡器、代理服务器及类似服务器 (例如,HAProxy 和 Nginx)。
从 http 页面中的元标记。
通常,可通过两种方法来设置标题:
覆盖值 (如果已设置标题)。
将值添加到现有值 (如果已设置标题)。
自定义 ThingWorx 中的缓存控制标题
修改缓存控制选项可能会对受影响的 ThingWorx 服务器性能产生负面影响。如果消息缓存时间较短或根本没有缓存,则传入的消息需要更长的处理时间。如果更多消息的缓存时间更长,则在操作过程中会消耗更多的内存。
要自定义 ThingWorx 中的缓存控制设置,必须修改 Apache Tomcat web.xml 文件:
1. web.xml 文件添加 X-Content-Type-OptionsX-XSS-Protection 参数来提高安全性:
<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. 添加所需的缓存控制标题。例如:
<init-param>
<param-name>Cache-Control</param-name>
<param-value>SET max-age=86400, public</param-value>
</init-param>
3. 如果需要更精细的配置,则可以添加具有不同映射的筛选器的多个实例。例如:

<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>