如何将 501 状态代码从 IBM Liberty 重定向到错误页面?

How to redirect a 501 status code from IBM Liberty to an error page?

已设置 IBM Liberty,一些故意损坏的请求到达后会收到 501 Not Implemented 响应。

示例损坏请求:

TRACK /<script>alert('TRACK');</script> HTTP/1.1
Referer: ...
Accept: */*
Pragma: no-cache
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0
Host: ...
...

Liberty 发送的响应是默认的,其上下文为:

HTTP/1.1 501 Not Implemented
... headers omitted ...
Date: Tue, 01 Feb 2022 01:01:01 GMT
Content-Length: 92

Error 501: Method TRACK is not defined in RFC 2068 and is not supported by the Servlet API 

我不想向请求者显示 501 和上述消息,我想将请求者引导至带有我选择的简单消息的自定义错误页面;最坏的情况是一个普通的 HTML 文件。

我还没有找到让 IBM Liberty 为 501 Not Implemented 响应生成除上述以外的任何内容的方法。

您可以通过为您的应用程序定义错误页面来处理该问题。这是我的配置方式:

  • 创建错误页面 - error.html

  • web.xml

    中创建以下条目
    <error-page>
       <error-code>501</error-code>
       <location>/error.html</location>
    </error-page>
    

只要您的应用生成 501,它就会 return 您的 error.html 页面。

已使用 Postman 和您的 Track 方法进行测试。先是501 unimplemented,然后是error page。

确保您的 server.xml

中具有 servlet-x.yjsp-a.b 特征