在CQ5发布实例中设置响应头

时间:2013-01-09 15:25:27

标签: cq5

我想禁用CQ组件中的缓存,我的jsp中有以下行(documentation):

response.setHeader("Dispatcher", "no-cache");

如果我在页面中插入组件并在创作实例中加载页面,一切都按预期工作,我得到一个名为Dispatcher的HTTP标头,内容为no-cache

现在,如果我在发布实例(具有CQ_RUNMODE='publish'和相同内容的相同配置)上执行相同操作,则该组件可用于设置HTTP标头。

有关为什么这两个实例可能表现不同的任何想法?

更新

我尝试设置其他标头,并且实例的行为方式相同:在创作模式下,标头是在发布模式下生成的(相同的配置,但对于CQ_RUNMODE

更新2

我试图通过删除页面中不必要的所有内容(布局,页眉,页脚代码等)来减少我的示例,我注意到在一定大小阈值之后我的标题生成正确。

换句话说,通过从页面中删除内容(即使是简单的HTML),我到达标题出现的某个点(如果页面足够小)。

为什么CQ只为非常小的页面生成标题?

2 个答案:

答案 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.

你可能想从这个最小的测试开始,并与你正在做的事情进行比较。