2016-04-03 55 views
0

問題:Tomcat 8静的ファイルをキャッシュします。それ以外の場合は

httpでcomcat 8から提供される静的ファイルにアクセスすると、ファイルの内容がキャッシュされてしまいます。 私は、次のエラーを排除することができます。

  1. を、それは私のブラウザのキャッシュ(無効は、CLIでwgetコマンドを使用し、異なるブラウザを試してみました)ではありません。 Tom 200はhttp 200で返されますOK
  2. それはnot an configuration issue with a conflicting antiResourceLocking
  3. 私は構成上の問題ではないと思いますか?

はここに私のserver.xmlです(下記参照)

<Server port="8005" shutdown="SHUTDOWN"> 
    <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> 
    <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> 
    <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> 
    <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> 
    <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> 

    <GlobalNamingResources> 

    <Resource name="UserDatabase" auth="Container" 
       type="org.apache.catalina.UserDatabase" 
       description="User database that can be updated and saved" 
       factory="org.apache.catalina.users.MemoryUserDatabaseFactory" 
       pathname="conf/tomcat-users.xml" /> 
    </GlobalNamingResources> 


    <Service name="Catalina"> 

    <Connector port="8888" protocol="HTTP/1.1" 
       connectionTimeout="20000" 
       redirectPort="8443" /> 

     <!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 --> 
     <Connector 
      protocol="org.apache.coyote.http11.Http11NioProtocol" 
      port="8883" maxThreads="200" 
      socketBuffer="-1" 
      scheme="https" secure="true" SSLEnabled="true" 
      keystoreFile="/vagrant/provision/configFiles/keystore" keystorePass="changeit" 
      clientAuth="false" sslProtocol="TLS"/> 

    <Engine name="Catalina" defaultHost="localhost"> 

     <Realm className="org.apache.catalina.realm.LockOutRealm"> 
     <Realm className="org.apache.catalina.realm.UserDatabaseRealm" 
       resourceName="UserDatabase"/> 
     </Realm> 

      <Host name="www.xxx.de" appBase="webapps"> 
         <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" /> 
         <Context path="" docBase="/vagrant/webroot/xxx"> 
          <Resources cachingAllowed="false" /> 
         </Context> 
         <Context path="/r2d2" docBase="/vagrant/webroot/r2d2"/> 
         <Context path="/data" docBase="/vagrant/webroot/shares/data"/> 
      </Host> 

    </Engine> 
    </Service> 
</Server> 

(私は...ここにコンテキストを入れてとても素敵ではありません知っている)そして、これは私のcontext.xml

です
<Context> 
    <Resources cachingAllowed="false" /> 

    <WatchedResource>WEB-INF/web.xml</WatchedResource> 
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource> 

</Context> 

context xml resourcesタグはパラノイアのためのものです。 server.xmlのresourcesタグはcontext.xmlのresourcesタグなしで十分でしょうか? しかし、ここに私が観察したものがあります:

Webルートのファイルを変更すると、tomcatはそれに応じてコンテンツ長を変更します(!)。実際にファイルが変更されたことを検出しています。しかし、内容はまだ間違っています(ファイルの最後にNUL文字を追加すると、ファイルシステムにもっと多くのコンテンツを入れます)。私はいつも200のok応答を得る。 小さなファイルの場合は完全に動作しますが、> 45172バイトのような "大きな"ファイルの場合は動作しません。

Webアプリケーションと作業フォルダが空です(!)。

私がtomcatを再起動しても、ファイルはまだサーバー側にキャッシュされています..そして、これは私が気を失った場所です:古いファイルの内容をどこから取得していますか?私はtomcatのgithubのソースコードを読んでも、キャッシュされたファイルの内容がメモリに保存されているのを見たことがあります。私はキャッシュされたファイルの一部についてはgreptして何も見つかりませんでした。

詳細情報:Tomcatは迷惑メールで動作していますが、ゲスト上またはホスト上のファイルを変更しても問題ありません。ファイルシステム(ゲストおよびホスト)からファイルが変更され、tomcat応答は200ですが、間違ったコンテンツが配信されます。

tomcat-8.0.28が動作しています。

これ以上のアイデアが:(事前にありがとうござい左。 フィリップ

答えて

1

ツールを使ってサイトをチェックして、ヘッダを見て。私はあなたの問題はそのTomcatがあなたのための間違ったhttpheadersを送信していると思います。

ただ、HTTPS要求で同じことをしようとしていないキャッシュファイルに変更内容が表示された場合、あなたはあなたのweb.xmlに

<filter> 
    <filter-name>ExpiresFilter</filter-name> 
    <filter-class>org.apache.catalina.filters.ExpiresFilter</filter-class> 
    <init-param> 
     <param-name>ExpiresByType image</param-name> 
     <param-value>access plus 0 minutes</param-value> 
    </init-param> 
    <init-param> 
     <param-name>ExpiresByType text/css</param-name> 
     <param-value>access plus 0 minutes</param-value> 
    </init-param> 
    <init-param> 
     <param-name>ExpiresByType application/javascript</param-name> 
     <param-value>access plus 0 minutes</param-value> 
    </init-param> 
</filter> 

を次のコードを追加することができます。デフォルトのTomcatパー

は、すべてのHTTPSがhttpheadersプラグマで要求を送信します。私はそれが欲しいorks

+0

''を忘れないでください。 –

関連する問題