如何用阀门修改Tomcat的响应头?

时间:2013-10-09 20:40:48

标签: tomcat response-headers tomcat-valve

我需要最小化Tomcat的响应头。向tomcat发送请求的设备在内存上非常有限,所以我想删除标题Date,Server和Content-Type。 我用动作钩设置了自己的阀门。钩子被调用,但似乎不可能删除日期和服务器头。

首先我只在ActionCode == COMMIT - 没有效果时才执行我的方法。 奇怪。所以我查看了Tomcat源代码:在AbstractHttp11Processor

时Tomcat ActionCode==COMMIT的方法action()中
    调用
  • prepareResponse()(设置服务器和日期标题)然后
  • 它将标头写入输出缓冲区。

因此无法拦截。当我在调用此操作之前设置标头时,它们会在AbstractHttp11Processor中被覆盖。当我在此之后设置标题时,它们将被忽略,因为它们已经写入缓冲区。我唯一的机会似乎是重置输出缓冲区并将标头写入缓冲区,还是有更好的方法?甚至有可能这样做吗?

1 个答案:

答案 0 :(得分:1)

无法删除日期标题。它是HTTP 1.1规范所要求的。请参阅RFC2626, section 14.18

目前无法禁用服务器标头,但如果您打开针对Tomcat的增强请求,我会考虑添加一个选项以完全禁用它。