testingHTTP状态码

我正在运行一个Apache Tomcat服务器。 进行一些安全testing我注意到,当我尝试访问一个不存在的元素而不是返回一个404状态码并将我redirect到默认的错误页面时,我的服务器返回了默认错误页面的200个HTTP状态码。 我怀疑这不是这个问题唯一的失败。

任何人都可以build议我一个检查最常见的HTTP状态代码的过程?

我将使用一个Bash脚本,为每个响应types调用一次netcat ,并使用适当的input来生成每种不同types的响应代码。 我会pipe这个虽然grep来检查正确的响应,并在STDERR上回显一条消息,如果它不正确。

对于2xx,3xx和4xx系列,这应该相对容易一些,假设您的服务器上存在实际上会生成每个不同响应代码的URL。 5xx范围是指服务器端的错误,所以要故意调用它们,您需要在服务器上设置导致每个错误的特定URL。 1xx范围可能使用更完整的HTTP客户端(如curlwget进行最佳testing。

最有可能有不止一种方法来解决这个问题。


在某个版本的netcat中存在一个令人讨厌的bug ,意味着一旦完成了STDIN的读取,它就会退出。 此外,这个buggy版本附带的手册页包括一个不起作用的例子。 解决方法是-q <number>选项,指定退出前等待答案的秒数。

 echo -ne "GET / HTTP/1.1\nHost: example.com\n\n" | nc -q 1 example.com 80 | grep -q "HTTP/1.1 301" || echo "HTTP 302 test failed!" >&2