WildFlyでレスポンスヘッダーにCache-Controlを追加する方法
2016年10月29日 20時26分13秒
サーブレットでレスポンスのヘッダーに任意の項目を追加したければ、
HttpServletResponseのsetHeaderを使えばいいだけなので簡単。
今回は、htmlやjsファイル等の静的コンテンツのダウンロードの場合のレスポンスヘッダーにCache-Controlを追加する方法を調べてみました。
今回調べる必要があったサーバーは、Apache + WildFly 8
まず、Apacheのhttpd.confでの設定を調べてみたが、全然うまくいかない。
そもそもhttpd.confの設定が全く効いてない感じ。
調べてみたら、AJPでApacheとWildFlyを連携させていたのが原因でした。
なので、WildFly側の設定方法を調査。
で、WildFlyのstandalone.xmlを編集すればレスポンスヘッダーに任意の項目を追加することが出来ることが判明。
具体的には下記のように修正すればOKでした。
【修正前のstandalone.xml】
<subsystem xmlns="urn:jboss:domain:undertow:1.1">
<buffer-cache name="default"/>
<server name="default-server">
<ajp-listener name="ajpListener" socket-binding="ajp"/>
<http-listener name="default" socket-binding="http"/>
<host name="default-host" alias="localhost"/>
</server>
<servlet-container name="default" default-encoding="UTF-8">
<jsp-config/>
</servlet-container>
</subsystem>
【修正後のstandalone.xml】
<subsystem xmlns="urn:jboss:domain:undertow:1.1">
<buffer-cache name="default"/>
<server name="default-server">
<ajp-listener name="ajpListener" socket-binding="ajp"/>
<http-listener name="default" socket-binding="http"/>
<host name="default-host" alias="localhost">
<filter-ref name="cache-control" predicate="path-suffix['.js']"/>
</host>
</server>
<servlet-container name="default" default-encoding="UTF-8">
<jsp-config/>
</servlet-container>
<filters>
<response-header name="cache-control" header-name="Cache-Control" header-value="no-store"/>
</filters>
</subsystem>
これで、jsファイルのレスポンスヘッダーにはCache-Control:no-storeが追加されるようになります。
固定の1ファイルだけを対象にしたい場合は、下記のようにしてあげればOK。
<filter-ref name="cache-control" predicate="path-suffix['test.js']"/>
※そもそもpath-suffixがいらないかも?path-suffixを削除して動かしたことないからどうなるか不明(^^;
あと、複数条件にしたい場合は下記
<filter-ref name="cache-control" predicate="path-suffix['.html'] or path-suffix['.js']"/>
これだとhtmlとjsファイルが対象になります。
HttpServletResponseのsetHeaderを使えばいいだけなので簡単。
今回は、htmlやjsファイル等の静的コンテンツのダウンロードの場合のレスポンスヘッダーにCache-Controlを追加する方法を調べてみました。
今回調べる必要があったサーバーは、Apache + WildFly 8
まず、Apacheのhttpd.confでの設定を調べてみたが、全然うまくいかない。
そもそもhttpd.confの設定が全く効いてない感じ。
調べてみたら、AJPでApacheとWildFlyを連携させていたのが原因でした。
なので、WildFly側の設定方法を調査。
で、WildFlyのstandalone.xmlを編集すればレスポンスヘッダーに任意の項目を追加することが出来ることが判明。
具体的には下記のように修正すればOKでした。
【修正前のstandalone.xml】
<subsystem xmlns="urn:jboss:domain:undertow:1.1">
<buffer-cache name="default"/>
<server name="default-server">
<ajp-listener name="ajpListener" socket-binding="ajp"/>
<http-listener name="default" socket-binding="http"/>
<host name="default-host" alias="localhost"/>
</server>
<servlet-container name="default" default-encoding="UTF-8">
<jsp-config/>
</servlet-container>
</subsystem>
【修正後のstandalone.xml】
<subsystem xmlns="urn:jboss:domain:undertow:1.1">
<buffer-cache name="default"/>
<server name="default-server">
<ajp-listener name="ajpListener" socket-binding="ajp"/>
<http-listener name="default" socket-binding="http"/>
<host name="default-host" alias="localhost">
<filter-ref name="cache-control" predicate="path-suffix['.js']"/>
</host>
</server>
<servlet-container name="default" default-encoding="UTF-8">
<jsp-config/>
</servlet-container>
<filters>
<response-header name="cache-control" header-name="Cache-Control" header-value="no-store"/>
</filters>
</subsystem>
これで、jsファイルのレスポンスヘッダーにはCache-Control:no-storeが追加されるようになります。
固定の1ファイルだけを対象にしたい場合は、下記のようにしてあげればOK。
<filter-ref name="cache-control" predicate="path-suffix['test.js']"/>
※そもそもpath-suffixがいらないかも?path-suffixを削除して動かしたことないからどうなるか不明(^^;
あと、複数条件にしたい場合は下記
<filter-ref name="cache-control" predicate="path-suffix['.html'] or path-suffix['.js']"/>
これだとhtmlとjsファイルが対象になります。
PR
Comment