tomcat 中针对 HTTP 501 错误的自定义错误页面

Custom error page in tomcat for HTTP 501 error

首先,我已经阅读了所有这些解决方案,这些解决方案说我在我的应用程序或 tomcat 的 conf/web.xml 中放置了一个 error-page 块并在相应的位置添加一个 error-code 块,但这些块不起作用(那些针对 404 错误的那些起作用了)。

我已经在我的应用程序和 tomcat 中做了什么 web.xml:

<error-page> <!-- this worked -->
    <error-code>404</error-code>
    <location>/pageNotFound.html</location>
</error-page>

<error-page> <!-- this did not work -->
    <error-code>501</error-code>
    <location>/pageNotFound.html</location>
</error-page>

我正在使用 Tomcat 8.5.63,目标是在出现 501 错误时删除响应中的“Apache Tomcat/8.5.63”部分。

我想删除这部分: tomcat error response page

我测试这个的方式是我使用 pentest 工具拦截请求(我正在使用 burp 套件社区)并修改请求以包含 Transfer-Encoding: cow header(是的我知道 header 无效)。

关于如何实现自定义页面以便正确处理 501 的任何想法?

您声明的错误页面有两种情况:

To allow developers to customize the appearance of content returned to a Web client when a servlet generates an error, the deployment descriptor defines a list of error page descriptions. The syntax allows the configuration of resources to be returned by the container either when a servlet or filter calls sendError on the response for specific status codes, or if the servlet generates an exception or error that propagates to the container.

Servlet 4.0 Specification,第 10.9.2 节)

在您的情况下,错误发生在 HTTP 请求本身的处理过程中。因此您需要修改服务器的配置(server.xml)并添加一个自定义的ErrorReportValve(参见documentation)。如果您只想省略服务器的版本字符串,只需添加:

<Host>
    <Valve className="org.apache.catalina.valves.ErrorReportValve" showServerInfo="false" />
    ...
</Host>