我的问题:
当我通过http访问从comcat 8提供的静态文件时,文件的内容将缓存在服务器端。 我可以排除以下错误:
这是我的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资源标签应该足够,而没有context.xml中的resources标签吗? 但是,这是我观察到的:
当我更改webroot中的文件时,tomcat会相应地更改内容长度(!)。因此它实际上检测到文件已更改。但是内容仍然是错误的(当我在文件系统中添加更多内容时,在文件末尾添加NUL字符)。我总是得到200个好的回复。 它确实适用于小文件,但不适用于&#34;更大的&#34;像〜&gt;这样的文件45172字节
我的webapps和工作文件夹为空(!)。
即使我重新启动tomcat,该文件仍然是缓存服务器端..这就是我失去理智的地方:tomcat从哪里获取旧文件内容?我甚至从tomcat上读取了github上的源代码,我已经看到缓存文件的内容存储在内存中了。我为缓存文件的某些部分进行了搜索,没有找到任何内容。
对于更多信息:tomcat在vagrant中运行,但是如果我修改guest虚拟机或主机上的文件并不重要。从文件系统(访客和主机)更改文件,tomcat响应为200,但传递了错误的内容。
tomcat-8.0.28正在运行。
不再有任何想法:(提前谢谢你。 菲利普
答案 0 :(得分:1)
使用工具检查网站并查找标题。我想你的问题是tomcat正在为你发送错误的httpheaders。
默认情况下,tomcat使用httpheaders pragma:no cache发送每个https请求。请尝试使用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>
我希望它有效