shell – 执行脚本后“netcat -e”重置连接

我发现了类似的问题
here,但没有答案.

我写了这个名为answer.sh的脚本:

#!/bin/sh

echo "HTTP/1.1 200 OK

Hello World"

如果我跑

./answer.sh | nc -c -l -p 8797

然后浏览到localhost:8797我得到一个只有“Hello World”文本的网页(这正是我想要的).

但如果我跑

nc -l -p 8797 -e ./answer.sh

浏览器说连接中断了.
所以我试试

nc localhost 8797

看看会发生什么,我得到了这个:

HTTP/1.1 200 OK

Hello World
read(net): Connection reset by peer

我想了解正在发生的事情以及(技术上)工作方式与其他方式之间的区别.

提前致谢.

最佳答案 看起来这个问题的答案很慢.我不能用nc -e进行测试,所以这不是一个完整的答案,但也许它将有助于开始对话……

我建议在HTTP响应中使用Content-Length:标头,例如

#!/bin/sh

echo "HTTP/1.1 200 OK
Content-Length: 11

Hello World"

用于…时

./answer.sh | nc -l -p 8797

…我发现它允许普通浏览器完成请求.没有它,浏览器不知道何时停止读取响应,并将等待服务器端关闭连接.

当从nc localhost 8797作为客户端连接时,显然这没有区别. nc对HTTP标头不感兴趣,只会继续读取,直到服务器端断开连接.

点赞