2

CQ コンポーネントでキャッシュを無効にしたいのですが、jsp に次の行があります (ドキュメント):

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

コンポーネントをページに挿入し、そのページをオーサリング インスタンスにロードすると、すべてが期待どおりに機能Dispatcherし、 contentという名前の HTTP ヘッダーが取得されますno-cache

パブリッシング インスタンス (同じ構成CQ_RUNMODE='publish'と同じコンテンツ) で同じことを行うと、コンポーネントは動作しますが、HTTP ヘッダーを設定するためのものです。

2 つのインスタンスの動作が異なる理由について何か考えはありますか?

アップデート

他のヘッダーを設定しようとしましたが、インスタンスは同じように動作します: オーサリング モードでは、ヘッダーは発行モードでは生成されません (同じ構成ですが、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 に答える