2

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

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

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

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

关于为什么这两个实例的行为可能不同的任何想法?

更新

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

更新 2

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

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

关于为什么 CQ 只为非常小的页面生成标题的任何想法?

4

2 回答 2

4

如果您尝试在页面下方的组件中设置标题,您可能会遇到在响应已提交后尝试编写它的问题。

如果您需要将页面标记为未缓存并且无法避免将代码放在缓冲区中的较高位置,则可以改为在 JSP 的开头写入此节点类型的检查(node.listChildren()例如使用),或提供页面属性让编辑器控制页面是否被缓存。

于 2013-01-26T22:42:05.673 回答
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.

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

于 2013-01-10T08:51:35.867 回答