2016-04-03 6 views
0

Mein Problem konfiguriert:Tomcat 8 Caches statische Dateien allthough sonst

Wenn ich Zugriff auf eine statische Datei von comcat diente 8 über http den Inhalt des Dateiservers sidely zwischengespeichert wird. Ich kann die folgenden Fehler ausschließen:

  1. es ist nicht mein Browser-Cache (deaktiviert, versucht verschiedene Browser, verwendet wget auf cli). Tomcat kommt mit http 200 zurück.
  2. Es ist not an configuration issue with a conflicting antiResourceLocking
  3. Ich denke nicht, dass es ein Konfigurationsproblem ist? (Siehe unten)

Hier ist meine server.xml (ich weiß, es ist nicht so schön, die Kontexte, in hier zu setzen ..)

<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> 

Und das ist mein context.xml

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

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

</Context> 

Der Kontext-XML-Ressourcen-Tag ist nur für Paranoia. Der Server.xml-Ressourcen-Tag sollte ausreichen, ohne den Ressourcen-Tag in context.xml, richtig? Aber hier ist, was ich beobachtet habe:

Wenn ich die Datei in der Webroot ändern, ändert Tomcat die Content-Länge entsprechend (!). Es erkennt also, dass die Datei geändert wurde. Aber der Inhalt ist immer noch falsch (Hinzufügen von NUL-Zeichen am Ende der Datei, wenn ich mehr Inhalt auf das Dateisystem lege). Ich bekomme immer 200 richtige Antworten. Es funktioniert perfekt für kleine Dateien, aber nicht für "größere" Dateien wie ~> 45172 Bytes

Meine Webapps und Arbeitsordner ist leer (!).

Auch wenn ich tomcat neu starte, wird die Datei noch Server-Seite im Cache gespeichert .. Und das ist, wo ich meinen Verstand verloren: Wo ist Kater aus den alten Dateiinhalte zu bekommen? Ich habe sogar den Quellcode von tomcat auf Github gelesen und ich habe gesehen, dass der Inhalt der zwischengespeicherten Dateien im Speicher gespeichert wird. Ich grepped für Teile der zwischengespeicherten Datei und fand nichts.

Für weitere Infos: der Tomcat läuft in Vagrant, aber es ist egal, wenn ich die Datei auf dem Gast oder auf dem Host ändern. Vom Dateisystem (Gast und Host) wird die Datei geändert, Tomcat-Antwort ist 200, aber der falsche Inhalt wird geliefert.

tomcat-8.0.28 läuft.

Keine Ideen übrig :(Vielen Dank im Voraus. Philipp

Antwort

1

Überprüfen Sie die Website mit einem Werkzeug und suchen Sie nach den Headern. Ich denke, Ihr Problem ist, dass Kater die falschen httpheaders für Sie sendet.

Per Default tomcat sendet mit httpheaders Pragma alle https anfordern:.. kein Cache versuchen Sie einfach das gleiche mit einem hTTPS-Anfrage Wenn Sie Ihre Änderungen auf Datei, dann können Sie folgenden Code-Schnipsel auf Ihrem web.xml hinzufügen

<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> 

ich hoffe es w orks

+0

vergiss das '' –