如何在 Tomcat 中禁用 ETag 标头

Ben*_*ams 4 performance tomcat http-headers etags

默认情况下,Tomcat 似乎为每个响应发送一个 ETag 标头。由于此处概述的原因,我想禁用这些。我知道我可以在我的 Apache 配置中删除它们,但是有什么方法可以在 Tomcat 端禁用它们吗?

Tim*_*unk 8

没有办法禁用开箱即用。但是 ETag 是由 DefaultServlet 通过 request.setHeader() 设置的。因此,禁用它们的一个简单解决方法是为 DefaultServlet 创建一个过滤器,它会吞下标签。例如:

void doFilter(ServletRequest 请求,ServletRequest 响应){
  chain.doFilter(request, new HttpServletResponseWrapper(response) {
      public void setHeader(String name, String value) {
          if (!"etag".equalsIgnoreCase(name)) {
              super.setHeader(name, value);
          }
      }
  });
}

在 web.xml 中:

  <过滤器>
    <filter-name>noetag</filter-name>
    <filter-class>foo.NoEtagFilter</filter-class>
  </过滤器>
  <过滤器映射>
    <filter-name>noetag</filter-name>
    <servlet-name>默认</servlet-name>
    <dispatcher>请求</dispatcher>
    <dispatcher>前进</dispatcher>
  </过滤器映射>