忍者ブログ

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ファイルが対象になります。

PR
Comment
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字