我想禁用CQ组件中的缓存,我的jsp中有以下行(documentation):
response.setHeader("Dispatcher", "no-cache");
如果我在页面中插入组件并在创作实例中加载页面,一切都按预期工作,我得到一个名为Dispatcher
的HTTP标头,内容为no-cache
。
现在,如果我在发布实例(具有CQ_RUNMODE='publish'
和相同内容的相同配置)上执行相同操作,则该组件可用于设置HTTP标头。
有关为什么这两个实例可能表现不同的任何想法?
更新
我尝试设置其他标头,并且实例的行为方式相同:在创作模式下,标头是在发布模式下生成的(相同的配置,但对于CQ_RUNMODE
)
更新2
我试图通过删除页面中不必要的所有内容(布局,页眉,页脚代码等)来减少我的示例,我注意到在一定大小阈值之后我的标题生成正确。
换句话说,通过从页面中删除内容(即使是简单的HTML),我到达标题出现的某个点(如果页面足够小)。
为什么CQ只为非常小的页面生成标题?
答案 0 :(得分:4)
如果您尝试在页面的远端组件中设置标题,则可能会遇到问题,即您尝试在response has been committed之后编写它。
如果您需要将页面标记为未缓存&你无法避免将代码放在缓冲区中更高的位置,你可以在JSP的开头写一个对这个节点类型的检查(例如使用node.listChildren()
),或者提供一个让编辑器控制的页面属性。页面是否缓存。
答案 1 :(得分:2)
您没有指出您正在使用的CQ5版本 - 我刚刚在CQ 5.5 GA发布实例上使用最小的JSP脚本进行了测试,并且标头已正确设置:
$ curl -u admin:admin http://localhost:4503/tmp/x.tidy.json
{
"sling:resourceType": "x",
...
}
$ curl -u admin:admin http://localhost:4503/apps/x/x.jsp
<%
response.setHeader("Dispatcher","no-cache");
%>
Here's the content.
$ curl -D - -u admin:admin http://localhost:4503/tmp/x.html
HTTP/1.1 200 OK
Connection: Keep-Alive
...
Dispatcher: no-cache
Here's the content.
你可能想从这个最小的测试开始,并与你正在做的事情进行比较。