![测试 HTTP 状态代码](https://linux22.com/image/580232/%E6%B5%8B%E8%AF%95%20HTTP%20%E7%8A%B6%E6%80%81%E4%BB%A3%E7%A0%81.png)
我正在运行 Apache Tomcat 服务器。进行一些安全测试时,我注意到当我尝试访问不存在的元素时,我的服务器会返回默认错误页面的 200 HTTP 状态代码,而不是返回 404 状态代码并将我重定向到默认错误页面。我怀疑这不是此问题的唯一失败。
有人可以建议我一个检查最常见 HTTP 状态代码的过程吗?
答案1
我将使用一个 Bash 脚本,该脚本netcat
针对每种响应类型调用一次,并使用适当的输入来生成每种不同类型的响应代码。我将通过管道检查响应是否正确,如果不正确,grep
则回显一条消息。STDERR
对于 2xx、3xx 和 4xx 范围,这应该相对容易,前提是您的服务器上存在实际生成每个不同响应代码的 URL。5xx 范围指的是服务器端错误,因此要故意调用它们,您需要在服务器上设置导致每个错误的特定 URL。最好使用更完整的 HTTP 客户端(例如 或 )来测试 1xxcurl
范围wget
。
解决这个问题很可能有多种方法。
有一个某些版本的 netcat 中存在严重错误这意味着它在从 STDIN 读取完毕后立即退出。此外,此错误版本附带的手册页包含一个不起作用的示例。解决方法是使用选项-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