防止Tomcat中的304 NOT MODIFIED响应

Posted

技术标签:

【中文标题】防止Tomcat中的304 NOT MODIFIED响应【英文标题】:Preventing 304 NOT MODIFIED response in Tomcat 【发布时间】:2016-03-29 15:33:59 【问题描述】:

如果资源(index.html)已经缓存在客户端,例如使用响应头:

"Cache-Control": "max-age=0, must-revalidate, proxy-revalidate"

如何防止 tomcat 在 next 对服务器的请求中响应 304 Not Modified?无论如何,我想强制服务器以 200 而不是 304 响应。 我试图设置

httpResp.setHeader("Cache-Control", "no-cache, no-store, must-revalidate, proxy-revalidate");
httpResp.setHeader("Pragma", "no-cache");
httpResp.setHeader("Expires", "0");

但它只适用于第二个请求。第一个请求仍然得到 304。 我尝试使用 HttpServletRequestWrapper 覆盖 if-modified-since 标头,并使用过去的值(例如 Mon, 06 Dec 2010 01:34:46 GMT)但没有运气 - 尽管该文件在 2015 年被修改,但客户端仍然收到 304 个响应。 有什么办法可以防止 304 响应?也许通过tomcat配置?

【问题讨论】:

【参考方案1】:

不确定这是否会有所帮助,但您可以尝试以下方法 -

    删除浏览器缓存从头开始测试是否有效

    改编自另一个 ServerFault 问题 -

https://serverfault.com/questions/40205/how-do-i-disable-tomcat-caching-im-having-weird-static-file-problems?answertab=votes#tab-top

在更改缓存允许标志后,您可能必须删除 /work/Catalina/localhost 中的应用程序缓存文件夹。 配置可以在server.xml中引入

    <Context className="org.apache.catalina.core.StandardContext"
             cachingAllowed="false"
             charsetMapperClass="org.apache.catalina.util.CharsetMapper"
             cookies="true" 
             reloadable="false" 
             wrapperClass="org.apache.catalina.core.StandardWrapper">
    </Context>

【讨论】:

以上是关于防止Tomcat中的304 NOT MODIFIED响应的主要内容,如果未能解决你的问题,请参考以下文章

tomcat 配置内存 防止溢出

iOS:收到“304 Not Modified”响应时 AVPlayerItem 中的错误

防止 MySQL 中的查询缓存

如何防止 Spring Boot / Tomcat (Java8) 进程被 OOM 杀死?

[译]理解HTTP/304响应

取消部署 Tomcat Web 应用程序时如何防止文件锁定?