如何识别 Web 服务器支持的不同 HTTP 方法,如 OPTIONS、TRACE 等?
我在 Linux 上尝试过nc命令。但它不起作用。它没有向我显示支持的 HTTP 方法,其他一些 HTTP 标头与请求的 HTML 页面一起返回。还有其他解决方案吗?
如何识别 Web 服务器支持的不同 HTTP 方法,如 OPTIONS、TRACE 等?
我在 Linux 上尝试过nc命令。但它不起作用。它没有向我显示支持的 HTTP 方法,其他一些 HTTP 标头与请求的 HTML 页面一起返回。还有其他解决方案吗?
根据RFC2616, OPTIONS 方法应该返回支持的方法。关键字是should因为情况并非总是如此。正如之前的帖子已经指出的那样,每种方法都需要单独测试才能确定。
由于只有少数方法(OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE 和 CONNECT),您可以使用脚本和 nc 向所有允许的方法发送请求并解析结果:
for method in OPTIONS GET HEAD POST PUT DELETE TRACE CONNECT ; do
echo -e "\n\nTrying $method\n\n"
echo -e "$method / HTTP/1.1\nHost: server-hostname\nConnection: close\n\n" | nc server-hostname 80 | head
sleep 2
done
HTTP 错误 400、403、405 和 406 通常是尝试使用未实现的方法时返回的类型。
识别 Web 服务器支持的方法的唯一方法是尝试每种方法并评估响应以确定它是否表明该方法受支持。您不能简单地查询它支持哪些方法;它不会给你一个清单。
也就是说,有比 nc 更好的工具。 Nmap 和 metasploit都支持 HTTP 方法扫描,并且基本上可以为您自动完成工作。
根据RFC 7231(HTTP 1.1 语义的新RFC),在某些情况下,HTTP 服务器将在其Allow响应标头中返回给定资源的支持方法列表:
OPTIONS请求的响应中,要么在特定的资源路径上,要么在特殊的*路径上(主要描述服务器的能力);Allow响应头中给出允许的方法列表;Allow响应头中返回支持的方法列表;但是如果服务器不合作怎么办?例如,您尝试了一个OPTIONS *请求,各种GET请求,而服务器从未在标头中返回允许的方法列表Allow?或者如果服务器回复了,但你怀疑它在撒谎怎么办?
然后你不知道,你将不得不忍受它。你会做什么取决于你的目标:
GET支持,并获取有关如何使用该系统的更多文档;PATCH),甚至自己发明一些;更一般地说,测试的一部分是向系统扔垃圾,看看它是如何反应的;但是,想想为什么你想知道支持的动词列表 - 因为没有额外的数据,知道使用了哪些动词几乎是无用的(例如,我知道https://accounts.google.com/AddSession接受POST动词 - 如果我知道动词对我有什么好处?不知道数据应该是什么格式,什么格式等?)