我发现了类似的问题
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标头不感兴趣,只会继续读取,直到服务器端断开连接.