我正在尝试使用 netcat 连接到在本地主机 80 端口上运行的 Nginx 服务器。但无论我发送哪个标头(GET、POST、HEAD),我总是收到相同的错误页面。有人能解释一下为什么吗?
pradeep@pradeep-laptop:~$ echo -n "GET / HTTP/1.0\r\n\r\n" | nc localhost 80
<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.1.19</center>
</body>
</html>
我正在运行上述相同的命令,但仍然得到 html 页面。
pradeep@pradeep-laptop:~$ echo -n "HEAD / HTTP/1.0\r\n\r\n" | nc localhost 80
<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.1.19</center>
</body>
</html>
我还使用 netstat 命令检查了我的 nginx 服务器是否正在运行。输出如下:
root@pradeep-laptop:/# netstat -taupen| grep LISTEN | grep :80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 0 264102 13723/nginx
答案1
echo
(在 bash 和 中/bin/echo
)默认情况下不扩展转义符。这意味着您的 CR 和 LF 字符实际上是作为\r
和发送的\n
。您需要提供-e
选项才能启用转义符。
$ echo -en "GET / HTTP/1.0\r\n\r\n" | nc localhost 80
HTTP/1.1 403 Forbidden