Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Aem 在CQ5发布实例中设置响应标头_Aem - Fatal编程技术网

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

Aem 在CQ5发布实例中设置响应标头,aem,Aem,我想在CQ组件中禁用缓存,我的jsp()中有以下行: 如果我在页面中插入组件并在创作实例中加载页面,一切都会按预期工作,我会得到一个名为Dispatcher的HTTP头,其内容为无缓存 现在,如果我在发布实例上执行相同的操作(与CQ\u RUNMODE='publish'的配置相同,内容也相同),那么该组件可以工作,但用于设置HTTP头 你知道为什么这两个实例的行为会不同吗 更新 我尝试设置其他头,实例的行为方式与此相同:在创作模式下,头是在发布模式下生成的,而不是在发布模式下生成的(相同的配置

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

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

现在,如果我在发布实例上执行相同的操作(与
CQ\u RUNMODE='publish'
的配置相同,内容也相同),那么该组件可以工作,但用于设置HTTP头

你知道为什么这两个实例的行为会不同吗

更新

我尝试设置其他头,实例的行为方式与此相同:在创作模式下,头是在发布模式下生成的,而不是在发布模式下生成的(相同的配置,但用于
CQ\u运行模式

更新2

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

换句话说,通过从页面中删除内容(即使是简单的HTML),我达到了页眉出现的特定位置(如果页面足够小)


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

你没有指出你正在使用哪个版本的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.
$curl-u管理员:管理员http://localhost:4503/tmp/x.tidy.json
{
“sling:resourceType”:“x”,
...
}
$curl-u管理员:管理员http://localhost:4503/apps/x/x.jsp
这是内容。
$curl-D--u管理员:管理员http://localhost:4503/tmp/x.html
HTTP/1.1200ok
连接:保持活力
...
调度器:没有缓存
这是内容。

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

如果您试图在页面最下面的组件中设置标题,您可能会遇到问题,即您试图在测试之后编写标题


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

也许这是一个太明显的建议——但是有没有可能您的注入头的代码被包装在某种
测试中?@davidgorline感谢您的建议。我检查了代码,没有任何条件。正确执行
setHeader
之前和
setHeader
之后的语句。关于更新2,我怀疑是页面大小造成了差异-删除某个组件(包括脚本等)时更可能出现这种情况标题再次工作。@BertrandDelacretaz不,我只是删除了一个简单的HTML行(甚至一个段落),标题重新出现。我还看到关于丢失块的错误。只要页面比HTTP块小,它就会工作。谢谢,这确实是个问题。我有时能够得到标题,因为页面足够小,以至于添加标题时响应尚未提交。分块问题仍然存在,但与此无关。如果jsp页面指令刷新缓冲区过快,可以通过向其添加buffer=“x”来控制缓冲区大小。太大可能会导致可伸缩性问题。您需要在第一个调用的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.